WebSocketのチャットルーム
ツールフラスコgevent-のWebSocketのnginxのpython3の使用
先来一段代码`在这里插入代码片
フラスコインポートフラスコから、render_template
geventwebsocket.websocketインポートからのWebSocket、WebSocketError
geventwebsocket.handlerインポートWebSocketHandlerから
gevent.pywsgiインポートてWSGIServerから
フラスコインポート要求から、リダイレクト
キューインポートキューから
LIB1インポートget_keyから
インポート時
のインポートのJSON
輸入_ctypes
アプリ=フラスコ(名)
user_socket_dict3 = {}
@ app.route( '/ WS / chat_room / <room_id>')
DEF(room_id)はWS:
いない場合send_msg_queue_dict.get(room_id):
send_msg_queue_dict [room_id] =キュー()
user_socket = request.environ.get(「wsgi.websocket」)
でない場合user_socket:
リターン「请以のWebSocket方式连接」
のuser_agent = request.user_agent
REMOTE_ADDR = request.remote_addr
キー= get_key(STR(user_agentの)+ STR(REMOTE_ADDR))
USER_NAME = r.get(キー)
user_socket_dict3 [USER_NAME] = user_socket
真しばらく:
試してみてください。
socket_list = []
send_msg_queue = send_msg_queue_dict.get("room_id")
cot = send_msg_queue.get()
if not cot:
continue
msg = cot.get("msg")
from_user = cot.get("from_user")
room_id = cot.get("room_id")
if room_id == "main":
members = r.get("on_line_user")
else:
members = r.get(room_id)
data = {"from_user": from_user, "contains": msg}
for member in members:
socket_list.append(user_socket_dict3.get(member))
for socket_user in socket_list:
socket_user.send(json.dumps(data))
user_msg = json.loads(user_msg)
except EnvironmentError as e:
print(e)
もし名前 ==「メイン」:
http_serve=WSGIServer(("0.0.0.0",8070),app,handler_class=WebSocketHandler)
http_serve.serve_forever()
`
nginxの設定
に配置された/etc/nginx/nginx.conf
HTTP]タブで追加
地図http_upgrade $ {$ connection_upgrade
デフォルトのアップグレードでは、
''閉じる;
}
/ect/nginx/conf.d/*.conf追加
場所/ WS {
uwsgi_paramsを含む;
proxy_http_version 1.1;#これは本の焦点は、データフォーマットの転送やエラー発生サポートしていない可能性がある
proxy_pass http://127.0.0.1:8070と、
proxy_set_header $ホストホスト;
proxy_set_header Xフォワード-FOR-$ proxy_add_x_forwarded_for;
proxy_set_header $ http_upgradeアップグレード;
proxy_set_header接続は、「アップグレード」;
}
その後、私たちのconfigure nginxのサービスは、フラスコサービスを開始し、サービスへのアクセスは、nginxので
教えるように多くの彼のようなバグ
私の最初のブログの技術を記念して###