作者jakeasa123 (酒虎)
看板Python
标题[问题] socketIO_client 卡住
时间Wed Aug 28 17:17:19 2019
各位前辈好,
小弟手边碰到一个问题,
还望各位前辈帮忙。
目前有个在本机内的 Node js 伺服器,
以 socket.io 在接收资料。
需求上,
要使用 Python 或其他语言以 socket 传送到伺服器内,
虽然想过去学 javascript,
在请教朋友和爬文下,
总算是搞出了一个 html 页面,
用 socket.io 与伺服器来往都如预期没有发现任何问题。
但是要传送给伺服器的资料是一个外接设备扫描後的资料,
看了一些文章,
基於安全性问题都不建议使用 html 来读取设备的资料,
所以又回到了最初的状况。
之所以选择 Python,
是因为相较於其他语言比较熟悉,
而且当初为了测试那个设备,
读取资料的程式都已经弄好了,
如果能完成 socket 传送的部分,
後续就能很快速地准备了。
目前找到的的是 socketIO_client,
参照该函示库的范例以及一些网路文章後撰写如下:
import socketIO_client
def on_connect():
print('connect')
testSocket = socketIO_client.SocketIO('127.0.0.1/', 8800)
# print(testSocket)
testSocket.on('connect', on_connect)
testSocket.emit('SendSocket',
{'ScanResult': 'abc123'})
testSocket.wait()
伺服器那边只要有连接就会跳一个「conn」的字串在 console 中,
一刚开始会不停地跳,
我还以为有传送,
但伺服器没写好;
请教了朋友後,
他说并没有问题,
我也在一边请教一边写的情况下写了一个 html 档来确认伺服器,
也证实了伺服器本身并没有问题。
後来,
我加上了上头注解掉的 print 才发现,
原来 testSocket = socketIO_client.SocketIO('127.0.0.1/', 8800) 就已经卡住,
後面的程式根本没有运作过,
而这也是小弟发文想请教的部分,
试着 Google 但都没有找到合适的解决办法或小弟没找到问题的症结点……
关於这部分,
希望有前辈可以告知小弟该如何解决!
先谢谢前辈花时间阅读此篇文章了,
谢谢!
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 39.8.5.181 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1566983844.A.099.html
1F:→ s860134: gdb python 08/28 22:55
2F:→ s860134: 或是 pdb 之类的 08/28 22:56
知识不足没有听闻过,
我先学习一下是什麽。
3F:推 AndyLee76: 版本不合吧 socket.io在Python上很难接 08/28 23:12
在自己尝试爬文的路上有注意到这点,
爬文有篇文章说可以尝试使用 socketIO_client_nexus,
但调整程式码後还是遭遇同样的问题。
5F:→ rexyeah: 我看example还蛮清楚的,example跑得起来吗? 08/29 09:46
我试过:
from socketIO_client import SocketIO, LoggingNamespace
with SocketIO('localhost', 8000, LoggingNamespace) as socketIO:
socketIO.emit('aaa')
socketIO.wait(seconds=1)
(LoggingNamespace 不太确定使用方法,
我测试时都把他砍了)
以及:
from socketIO_client import SocketIO, LoggingNamespace
def on_connect():
print('connect')
socketIO = SocketIO('localhost', 8000, LoggingNamespace)
socketIO.on('connect', on_connect)
socketIO.emit('aaa')
socketIO.wait(seconds=1)
(上述 Port 都有记得更改,
这边只是沿用 socketIO_client 的范例内容)
两者都与内文遭遇同样的问题。
* * * * *
後来把 LoggingNamespace 补回去,
但能力太浅看不太出来差异……
再来是,
刚刚把 server.js 中跟判断连线网址的内容全部砍掉後,
莫名地可以运作了,
我可能要先往 server.js 那边再确认一下发生甚麽问题。
* * * * *
来回报一下最後的结果。
首先是函式库,
socketIO_client 和 socketIO_client_nexus 两者,
前者好像可以应用在比较旧版本的 socket.io,
而後者则是比较新的版本,
我中途找到 socketIO_client_nexus 後就一直使用,
没有回测 socketIO_client 在解决问题後能不能通。
其次是问题跟函式库本身没太大关系,
是我自己 server.js 有段检查 headers 以及判断检查结果的程式码,
导致 socketIO_client_nexus 传过去时因为缺少 headers 所以直接炸掉,
而内文中遭遇的其他问题应该都是修错地方导致的。
後来调整成:
socketIO = SocketIO(targetAddress,
serverPort,
headers={headerKey: headerValue})
就没有出现问题了。
很抱歉遭遇了一个满蠢的问题,
也再次谢谢各位前辈花时间阅读与回应!
※ 编辑: jakeasa123 (175.181.39.217 台湾), 08/29/2019 15:41:32