我尝试使用带有socket.IO的NodeJS服务器和使用socketIO-client软件包在python 2.7中编写的客户端构建一个简单的聊天应用程序。 js服务器在本地,非常简单:
io.on('connection', function(socket){
socket.on("chat_message", function(msg){
io.emit("chat_message", msg);
});
});
此聊天应用适用于在浏览器中打开的多个页面。 (来源于:http://socket.io/get-started/chat/)
我想从python客户端连接这个服务器,并且我成功地从python发送到js服务器(在python客户端中输入的文本出现在浏览器中)。
问题如下: 当我在浏览器中输入一些文本时,Python不会将它打印到shell中。
这是我在python方面使用的代码:
def communicate(self, msg):
logging.debug('processing event : %s', msg)
self.socketIO.emit("chat_message", msg, self.on_chat_message)
def on_chat_message(self, *args):
output = ''
index = 0
for a in args:
output += ' | '+str(index)+' : '+str(a)
index += 1
logging.debug('processing server output : ' + output)
return
当服务器发送到所有连接的客户端时,python通常应该将其处理回回调' on_chat_message'但是,它没有用。
我还试图在python中添加一个self.socketIO.wait_for_callbacks(),但没有成功。
如果有人知道我做错了什么,那就太棒了= D! 感谢。
答案 0 :(得分:0)
我终于设法从我的python客户端上的服务器获得响应。
我的错误是不要等待'在socketIO变量上,所以我没有收到任何反馈。
为了正确处理服务器响应,我使用绑定到套接字的BaseNamespace类,并处理基本事件:覆盖函数on_event
Thread progressTimer = new Thread(new Runnable() {
@Override
public void run() {
for(int i = 0; i <= 100; i++){
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
handler.sendMessage(new Message());
}
}
});
Handler handler = new Handler(new Handler.Callback() {
int progress = 0;
@Override
public boolean handleMessage(Message msg) {
progreesBarDeterminate.setProgress(progress++);
return false;
}
});
如果某个事件由该类处理,则会引发一个标记并由客户端进行检查。
def on_event(self, event, *args):
#Catch your event and do stuff
这两个函数由客户端代码中的2个线程管理。
希望这会有所帮助=)