socket.io 1.0 では connect っぽく middleware として書けるようになりました。 socket.io 1.0 のハンドシェイク! socket.request で Request オブジェクトが受け取れるのでそれを利用します。 (以下、Express 4.x の場合) Session = require('express-session').session.Session COOKIE_SECRET = 'himitsu-dayo' COOKIE_KEY = 'sid' # # 途中省略 # # Socket.io io = require('socket.io')(server) # セッション共有 io.use (socket, next)-> # クッキーからセッション ID を取得する cookie = require('cookie').parse
サーバ側 サーバ側のプログラムは基本的に、 socketでソケットを作成 bindでアドレスとポート番号を指定 listenでクライアントの接続を待つ acceptでクライアントの接続を受け付ける sendやrecvを使ってクライアントのデータの送受信を行う closeでソケットを閉じる の流れで行う。 tcp_server1.py from __future__ import print_function import socket from contextlib import closing def main(): host = '127.0.0.1' port = 4000 backlog = 10 bufsize = 4096 sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM) with closing(sock): s
今回はソケットプログラミングについて。 ソケットというのは Unix 系のシステムでネットワークを扱うとしたら、ほぼ必ずといっていいほど使われているもの。 ホスト間の通信やホスト内での IPC など、ネットワークを抽象化したインターフェースになっている。 そんな幅広く使われているソケットだけど、取り扱うときには色々なアーキテクチャパターンが考えられる。 また、比較的低レイヤーな部分なので、効率的に扱うためにはシステムコールなどの、割りと OS レベルに近い知識も必要になってくる。 ここらへんの話は、体系的に語られているドキュメントが少ないし、あっても鈍器のような本だったりする。 そこで、今回はそれらについてざっくりと見ていくことにした。 尚、今回はプログラミング言語として Python を使うけど、何もこれは特定の言語に限った話ではない。 どんな言語を使うにしても、あるいは表面上は抽象化さ
Python: HTTP サーバーをつくるPython: JSON を返す HTTP サーバーをつくるPython: socket モジュールを使って JSON を返す HTTPS サーバーをつくる ソケットの学習のために書いた。SSL への対応は ssl モジュールの wrap_socket でソケットオブジェクトをつつめばよい。 import socket import ssl import json address = '127.0.0.1' port = 8000 socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) socket = ssl.wrap_socket(socket, certfile='cert.pem', server_side=True) socket.bind((address, port)) s
poll(2) や select(2) を使う代わりに、カーネルからアプリケーションに イベントを通知させるのに SIGIO シグナルを使う方法もある。 この方法を使うには、 fcntl(2) を用いてソケットのファイルディスクリプターに O_ASYNC フラグをセットし、 SIGIO に対する有効なシグナルハンドラーを sigaction(2) によって設定しておく必要がある。 後述の シグナル に関する議論も参考にすること。 ソケットアドレス構造体 各ソケットドメインにはそれぞれ独自のソケットアドレス形式があり、ドメイン固有のアドレス構造体を持っている。 これらの構造体の先頭には、アドレス構造体の種類を示す整数の "family" フィールド (型は sa_family_t) がある。 このフィールドにより、 すべてのソケットドメインで汎用的に使用されるシステムコール (例えば、 co
*Python3系の分を追記しました Pythonによる通信処理 この記事は 慶應義塾大学SFC村井&徳田研 Advent Calendar 2015 の21日目の記事です。 1. はじめに 夏まで「UNIXコマンドってなんやねん」レベルで、ロクに実装もせずに研究意義とかサービスについて語っちゃう自分に嫌気がさして秋学期からPCを触り始めました。 それからSwift,Pythonを触り始めて今はPythonを書いてます。 つまるところプログラミング初心者です。今回はPythonでのソケット通信について書きます。 今回の内容 PythonだけでTCPサーバーを立ててTCPクライアントとソケット通信する。 2. 環境 クライアント OS X --version 10.10.5 Python --version 2.7.10 サーバー CentOS --version 6.5 Python --
socket通信 1. socketを作る IP: socket.AF_INET TCP: socket.AF_INET, socket.SOCK_STREAM UDP: socket.AF_INET, socket.SOCK_DGRAM 2. connectionを作る(TCPのみ) TCP server: bind, listen, accept TCP client: connect 3. 送受信する TCP: send, recv UDP: sendto, recvfrom 例:TCP通信 googleのページをhttp getで取得 import socket client = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect(("www.google.co.jp",80)) client.send(
webアプリでないコマンドラインでの、pythonのチャットプログラムは、探せばある。 しかし、どれも(非同期入力ができるものは)Windowsで動かない。一応、動くものができたので公開する。 サーバープログラム 「python server.py IPアドレス」として起動 import sys, socket, select def broadcast(socklist, server_socket, sock, message): print(message) for socket in socklist: if socket != server_socket and socket != sock : try : socket.send(message.encode()) except : socket.close() socklist.remove(socket) if __name
This document is for an old version of Python that is no longer supported. You should upgrade and read the Python documentation for the current stable release. Abstract Sockets are used nearly everywhere, but are one of the most severely misunderstood technologies around. This is a 10,000 foot overview of sockets. It’s not really a tutorial - you’ll still have work to do in getting things operatio
2つのアプリケーション間でデータのやり取りを行うためには、データを出し入れするための受け口が必要となる(電気製品を利用するための電気の受け口を想像されたい)。 ソケット(socket)とはTCP/IP通信プログラムを作る場合のTCP/IPインターフェースで、TCP/IPをAPI(Application Programming Interface)の形にしたものである。 元来は、TCP/IPソケットはBSD UNIXで開発されたきたが、現在はLinuxやSolarisなどUNIX全般だけでなくWindowsやMacintoshでも採用され、ソケットを使って開発されたアプリケーションの移植性は高い。 アプリケーションがソケットを使って通信する場合には、通信する側とされる側の両方でソケットを作成して、それらを接続する必要がある。 Javaの主なソケットには、TCPを使って接続が維持されるコネクシ
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く