【发布时间】:2016-07-11 08:43:03
【问题描述】:
这可能更多是关于线程的问题,而不是关于我的 websocket 的问题。 我正在使用来自 github (https://github.com/dpallot/simple-websocket-server) 的“SimpleWebSocket” 该示例运行良好:
from SimpleWebSocketServer import SimpleWebSocketServer, WebSocket
class SimpleEcho(WebSocket):
def handleMessage(self):
# echo message back to client
self.sendMessage(self.data)
def handleConnected(self):
print self.address, 'connected'
def handleClose(self):
print self.address, 'closed'
server = SimpleWebSocketServer('', 8000, SimpleEcho)
server.serveforever()
服务器正在运行,我可以连接并发送消息。
现在我尝试使用这些类将其作为线程运行: 这个应该创建许多线程,包括 WebSocketServer
from websockethread import WebSocketThread
class startManyThreads:
def __init__(self):
self.thread1 = WebSocketThread()
self.thread1.start()
if __name__ == "__main__":
startManyThreads = startManyThreads()
这个类应该作为我的线程运行:
import threading
from SimpleWebSocketServer import SimpleWebSocketServer
from webSocketServer import WebSocketServer
class WebSocketThread(threading.Thread):
def __init__(self):
threading.Thread.__init__(self)
server = SimpleWebSocketServer('', 8000, WebSocketServer)
server.serveforever()
这是“定制的”回声示例:
from SimpleWebSocketServer import SimpleWebSocketServer, WebSocket
class SimpleEcho(WebSocket):
def handleMessage(self):
# echo message back to client
self.sendMessage(self.data)
def handleConnected(self):
print self.address, 'connected'
def handleClose(self):
print self.address, 'closed'
我也试过推导出这个:class SimpleEcho(WebSocket, threading.Thread):
任何想法我做错了什么? & 提前非常感谢!
编辑: 当我运行“simpleEcho”时的结果是我得到一个提示可以通过websocket.html(在github上提供)连接,发送和接收消息
当我将它放入一个线程(我尝试过的 3 种方法中的任何一种)时的结果是相同的行为,除非我尝试从 websocket.html“连接”我得到一个“错误:未定义”。通过 nmap 我检查了服务器似乎正在运行并监听端口 8000
编辑 2:从 SimpleWebSocketServer 派生新类
import threading
from SimpleWebSocketServer import SimpleWebSocketServer
class ThreadSimpleWebSocketThread(threading.Thread, SimpleWebSocketServer):
def __init__(self, serversocket):
threading.Thread.__init__(self)
self.serversocket = serversocket
def serveforever(self):
SimpleWebSocketServer.serversocket = self.serversocket
SimpleWebSocketServer.selectInterval = 0.1
SimpleWebSocketServer.listeners = [self.serversocket]
super(ThreadSimpleWebSocketThread, self).serveforever()
def run(self):
self.serveforever()
【问题讨论】:
-
预期行为和实际行为是什么?
-
预期的行为是我可以连接到 github 上提供的“测试客户端”。实际行为是,一旦我将它作为线程运行,我就会得到一个“未定义的错误”(在测试“主页”上)。其他地方没有错误
标签: python multithreading websocket