是否可以使用Javascript连接到Python套接字服务器?

是否可以使用Javascript连接到Python套接字服务器?,javascript,python,http,browser,websocket,Javascript,Python,Http,Browser,Websocket,我正在使用模块socketserver创建Pythonsocketserver: 导入socketserver 类MyTCPHandler(socketserver.BaseRequestHandler): def设置(自): 通过 def句柄(自身): 通过 使用socketserver.TCPServer((“localhost”,4000),MyTCPHandler)作为服务器: 服务器。永远为您服务() 我使用了Python模块websockets,可以使用websocketapi访问

我正在使用模块
socketserver
创建Python
socketserver

导入socketserver
类MyTCPHandler(socketserver.BaseRequestHandler):
def设置(自):
通过
def句柄(自身):
通过
使用socketserver.TCPServer((“localhost”,4000),MyTCPHandler)作为服务器:
服务器。永远为您服务()
我使用了Python模块
websockets
,可以使用websocketapi访问Javascript中的websocket。在没有完全理解Python模块
socketserver
的真正功能的情况下,我尝试使用websocket连接到
TCP socketserver

var socket=newwebsocket('ws://localhost:4000');//错误:Firefox无法在ws://localhost:4000/上建立与服务器的连接。
每次Firefox抛出错误
Firefox无法在ws://localhost:4000/
上建立到服务器的连接,然后,我尝试使用Python
http
模块连接到服务器:

导入http.client
httpConnection=http.client.HTTPSConnection(“localhost:4000”,超时=10)
打印(httpConnection)#HTTP连接对象

不幸的是,这起了作用。现在,我知道Python内置的
socketserver
模块只能通过HTTP访问。现在,我想知道是否可以在浏览器中使用Javascript连接到Python
TCP socketserver
。如果没有,我将只使用
websockets
或找出如何创建自己的websocket。

使用
socketserver
,您必须在代码中实现websocket协议。网上有一些教程,例如:

虽然@scenox的博客链接非常有用,但它已经过时了。我进行了更多的搜索,并对其进行了修复,以更好地反映当今的websocket标准:

def设置(自):
打印(打印(自)
data=str(self.request.recv(1024))
如果数据中有“升级:websocket:#连接:升级可能是连接:保持活动状态,升级
key=base64.b64编码(hashlib.sha1((data.split(“Sec WebSocket key:”)[1]。split(\\r\\n”)[0]+“258EAFA5-E914-47DA-95CA-C5AB0DC85B11”)。编码('ascii')).digest()。解码('ascii')#编码为ascii,然后解码
self.request.sendall(f“HTTP/1.1 101交换协议\r\nSec WebSocket Accept:{key}\r\n连接:升级\r\n升级:WebSocket\r\n\r\n.encode())#对其进行编码,以便将其作为类似字节的对象发送
尽管如此:
#我还没有弄明白如何解码帧。
其他:
self.request.sendall(“HTTP/1.1 400错误请求\r\n”+\
“内容类型:文本/普通\r\n”+\
“连接:关闭\r\n”+\
“\r\n”+\
“不正确的请求”)

我还没有解码帧,但我至少建立了连接。

那么,从本质上说,websocket只是一个带有额外头的HTTP连接?服务器只需要做一些额外的处理,它不是HTTP连接,而是类似的。与HTTP不同,WebSocket提供全双工通信。WebSocket在端口80或443上启用TCP之上的消息流。WebSocket握手使用HTTP升级头将HTTP协议更改为WebSocket协议。因此,是的,服务器需要对websocket进行额外的处理。你可以在维基百科上阅读更多关于websocket协议的信息。