微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Python [Errno 104]由对等方重置连接

我正在尝试通过websocket与服务器通信。我使用websocket库和Python 3

这是处理websocket的代码

import websocket
import threading


class SubscriptionClient:

    def __init__(self,stream_name,uri,on_message=None,**kwargs):
        self.stream_unique_name = stream_name
        self.uri = uri
        self.ws = None
        self.on_message_func = on_message

        self.logger = get_logger('websockets',__name__)

        self.logger.info('[WEBSOCKET] connecting to stream: ' + self.stream_unique_name)

        self.thread = threading.Thread(target=self.websocket_initializer,args=[])
        self.thread.start()
        self.logger.info('[WEBSOCKET] stream: ' + self.stream_unique_name + ' is Now connected'

        # self.start_heartbeat()

    def on_message(self,ws,message):
        if self.on_message_func:
            self.on_message_func(ws,message)
        else:
            print('ws:',message)

    def on_error(self,error):
        print('error',error)

    def on_close(self,ws):
        self.logger.info('[WEBSOCKET] stream: ' + self.stream_unique_name + ' closed')
        print("### closed ###")

    def on_ping(self,ping):
        print('############ PING #################')
        print(ping)
        

    def websocket_initializer(self):
        self.ws = websocket.WebSocketApp(self.uri,on_message=lambda ws,msg: self.on_message(ws,msg),on_error=lambda ws,error: self.on_error(ws,error),on_close=lambda ws: self.on_close(ws),on_ping=lambda ws,ping: self.on_ping(ws,ping)
                                         )

        self.ws.run_forever()

    def start_heartbeat(self):
        threading.Timer(60.0,self.start_heartbeat).start()
        self.ws.send('heartbeat'.encode('utf-8'))


当我在本地PC上运行此代码时,它可以正常工作,但是在EC2 AWS生产服务器上运行它时,我设法成功连接,大约10分钟后,我从网络套接字收到此消息error [Errno 104] Connection reset by peer。我知道为什么会这样。 我与正在连接的网站进行了交谈,他们说这可能是防火墙配置,但是当我在AWS实例中运行此命令systemctl list-unit-files | grep fire时,我什么都没发现。

即使我要捕获此错误并按照here中的说明重新连接到服务器,似乎我必须捕获此错误的唯一方法是比较字符串,这似乎不是正确的解决方案。 (我提醒您,我在on_error函数中收到错误,并且由于某种原因,它似乎给了我error作为字符串)。

有人知道这里发生了什么吗?为什么它在我的本地PC上可以正常运行,但是在生产服务器上却无法运行?!

原文地址:https://www.jb51.cc/python/3191865.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐