我已经使用 sockjs-tornado 实现了聊天功能,并且可以将消息存储在 RethinkDB 中。
您能否帮助我了解如何在 sockjs-tornado 中建立用于消息传递的私人频道?(我的意思是私人谈话/一对一)
下面是我的服务器端代码中的 on_message 函数 -
def on_message(self, message):
str=message
mg=str.split('#:#')
sender=1 # This is the sender user id
receiver=2 #This is the receiver user id - I need to implement session variables to have these id's so that I can use it here this way
ts=r.expr(datetime.now(r.make_timezone('00:00')))
connection = r.connect(host="192.x.x.x")
r.db("djrechat").table('events').insert({"usrs":mg[0],"msg":mg[1],"tstamp":ts,"snder":sender,"rcver":receiver}).run(connection)
log.info(message)
self.broadcast(self.participants, '{} - {}'.format(self.stamp(),message))
目前,这正在向所有连接的客户端广播。可能我应该有一个通道 id 并且只向两个具有相同通道 id 的客户端发送消息,但是我该如何实现它或者有没有更好的解决方案呢?
在客户端,我有以下 javascript -
function connect() {
disconnect();
conn = new SockJS('http://localhost:8080/chat', ['websocket','xhr-streaming','iframe-eventsource','iframe-htmlfile','xhr-polling','iframe-xhr-polling','jsonp-polling']);
//log('Connecting.....');
conn.onopen = function() {
// log('Connected. (' + conn.protocol + ')');
log('Connected.');
};
conn.onmessage = function(e) {
log(e.data);
};
conn.onclose = function() {
log('Disconnected.');
conn = null;
};
}
我正在使用 python 3.4 - Django 1.8.4 和 Rethinkdb