[問題] socketIO_client 卡住
各位前輩好,
小弟手邊碰到一個問題,
還望各位前輩幫忙。
目前有個在本機內的 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://www.ptt.cc/bbs/Python/M.1566983844.A.099.html
→
08/28 22:55,
5年前
, 1F
08/28 22:55, 1F
→
08/28 22:56,
5年前
, 2F
08/28 22:56, 2F
知識不足沒有聽聞過,
我先學習一下是什麼。
推
08/28 23:12,
5年前
, 3F
08/28 23:12, 3F
在自己嘗試爬文的路上有注意到這點,
爬文有篇文章說可以嘗試使用 socketIO_client_nexus,
但調整程式碼後還是遭遇同樣的問題。
推
08/29 09:46,
5年前
, 4F
08/29 09:46, 4F
→
08/29 09:46,
5年前
, 5F
08/29 09:46, 5F
我試過:
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
Python 近期熱門文章
PTT數位生活區 即時熱門文章