2017-06-01 20 views
0

私はFBのようなアプリケーションを作成しようとしています。私はすでにフラスコのsocketio実装の最小限のものから始めました。これまでのところ、私はすでに、クライアントとサーバー側が共通のハンドラを介して通信することを理解しています。現在の実装はすべてのチャットで無料です。フラスコsocketio複数の接続

クライアント側:簡潔にするために私はちょうどハンドラを示し

socket.on('message', function(msg) { 
    $("#messages").append('<li>'+msg+'</li>'); 
    console.log('Received message'); 
}); 

サーバー側:

@socketio.on('message') 
def handleMessage(msg): 
print('Message: ' + msg) 
send(msg, broadcast=True) 

質問:

がどのように私はので、引数に渡します異なるチャットIDを持つ可能性があります

答えて

0

あなたがやりたいことは、いくつかのチャットルームだと思います。良いニュース! Flask-SocketIOは現在ネイティブに部屋を扱っています。 あなたはこのようなモジュールをインポートすることができます:ルームに参加するために

from flask_socketio import SocketIO, emit, join_room, leave_room, 
close_room, rooms, disconnect 

を、それは次のようになります。

@socketio.on('join', namespace='/test') 
def join(message): 
    join_room(message['room']) 
    session['receive_count'] = session.get('receive_count', 0) + 1 
    emit('my_response', 
     {'data': 'In rooms: ' + ', '.join(rooms()), 
'count': session['receive_count']}) 

あなたはMiguel's Github pageのコードの完全な例を見つけることができます:)

0

こんにちは。 sidからクッキーを取得できます。チャットIDをクッキーに保存する場合。ユーザーIDを簡単に識別できます。 これは私の名前空間のコードです。

import socketio 
import imp 
import json 
from datetime import datetime, timedelta 
gameDBModule = imp.load_compiled("ChatDatabase", "./game_chat/chat_database.pyc") 
apiModule = imp.load_compiled("TotoAPI", "./game_api/__init__.pyc") 

class GameChat(socketio.Namespace): 

    def init(self): 
     self.lastDataIndex = 0 
     self.api = apiModule.TotoAPI() 

    def on_join(self, sid, message): 
     self.db = gameDBModule.ChatDatabase() 
     sessid = self.getUserId(sid) 
     try: 
      info = json.loads(self.api.userinfo(sessid)) 
      userID = str(info[4]) 
     except Exception as e: 
      userID = None 

     self.emit('join', {'history': self.db.get_chathistory(), 'channel': message, 'moderator': False, 'user_id': userID}, room=sid) 


    def on_connect(self, sid, environ): 
     self.emit('connect', {'data': 'Connected', 'count': 0}, room=sid) 
     print('GameChat Connected') 

    def on_say(self, sid, message, environ): 
     sessid =self.getUserId(sid) 
     try: 
      info = json.loads(self.api.userinfo(sessid)) 
      userID = str(info[4]) 
     except Exception as e: 
      userID = None 

     if userID !=None: 
      userID = None 
      #Save into History 
      now = self.get_current_time(9) 
      self.lastDataIndex = self.lastDataIndex + 1 
      item = { 
       'dataIndex': self.lastDataIndex, 
       'bot': False, 
       'date': now, 
       'message': message, 
       'role': 'user', 
       'type': 'say', 
       'user_id': userID 
      } 
      self.emit('msg', item) 
      item['date'] = self.get_current_time(0) 
      self.db.insert_chatting(item) 



    def on_disconnect(self, sid): 
     print('GameChat disconnected') 

    def getUserId(self, sid): 
     try: 
      #Get UserID from Cookies 
      cookies = str(self.server.environ[sid]['HTTP_COOKIE']).split(';') 
      id = None 
      for item in (cookies): 
       name=str(item).split('=')[0].strip() 
       value=str(item).split('=')[1].strip() 
       if name.__eq__('ci_session'): 
        id = value 
      return id 
     except Exception as e: 
      return None 


    def get_current_time(self, diff): 
     i = datetime.now() - timedelta(hours = diff) 
     return i.isoformat()[:-3]+"Z" 

this is the code using above name space 

async_mode = 'eventlet' 

import eventlet 
import eventlet.wsgi 
from flask import Flask, render_template, Response, request, make_response 
import socketio 
import imp 

gameChatModule = imp.load_compiled("GameChat", "./game_chat/__init__.pyc") 
apiModule = imp.load_compiled("TotoAPI", "./game_api/__init__.pyc") 

sio = socketio.Server(logger=False, async_mode=async_mode) 
app = Flask(__name__) 
app.wsgi_app = socketio.Middleware(sio, app.wsgi_app) 
app.config['SECRET_KEY'] = 'secret!' 
api = apiModule.TotoAPI() 
ns = gameChatModule.GameChat("/") 
ns.init() 


if __name__ == '__main__': 
    sio.register_namespace(ns) 
    eventlet.wsgi.server(eventlet.listen(('', 8880)), app) 

私はあなたのpython 3を使用するようですが、あなたは私のコードを実装することができますのpython 2.7でそれを実装しています。

関連する問題