如何从nodeJS服务器获取python客户端的响应

时间:2015-07-09 16:20:31

标签: node.js sockets python-2.7 socket.io

我尝试使用带有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! 感谢。

1 个答案:

答案 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个线程管理。

希望这会有所帮助=)