【问题标题】:How to get response on python client from a nodeJS server如何从nodeJS服务器获取python客户端的响应
【发布时间】:2015-07-28 00:40:18
【问题描述】:

我正在尝试使用带有 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”中,但是它不起作用。

我还尝试将 self.socketIO.wait_for_callbacks() 添加到 python,但没有成功。

如果有人知道我做错了什么,那就太好了 =D! 谢谢。

【问题讨论】:

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


    【解决方案1】:

    我终于设法在我的 python 客户端上获得了服务器的响应。

    我的错误是没有在 socketIO 变量上“等待”,所以我没有收到任何反馈。

    为了正确处理服务器响应,我使用绑定到套接字的 BaseNamespace 类,并处理基本事件:重写函数 on_event

    def on_event(self, event, *args):
        #Catch your event and do stuff
    

    如果类处理了一个事件,则客户端会提出一个标志并进行检查。

    def communicate(self, msg):     
        self.socketIO.emit('chat_message', msg)
    
    def wait_for_server_output(self):
        while(1):
            self.socketIO.wait(seconds=1)
            ns = self.socketIO.get_namespace()
            if ns.flag.isSet():
                data = ns.data_queue.get()
                ns.flag.clear()
    

    这两个函数由客户端代码中的 2 个线程管理。

    希望这会有所帮助 =)

    【讨论】:

      猜你喜欢
      • 2018-12-02
      • 2012-02-21
      • 1970-01-01
      • 1970-01-01
      • 2019-12-18
      • 2015-05-11
      • 2014-06-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多