iT邦幫忙

0

websocket 連線問題

我參考了這個網站,想做出聊天系統
https://blog.csdn.net/tongtongsong/article/details/83620550
因為程式碼太常我就不全部貼上來了
目前卡在連線
想請問$sk=new Sock('localhost',8080);

var url='ws://localhost:8080';

我使用了我本機端設定的:8080,但卻出現以下錯誤訊息
client.php:141 WebSocket connection to 'wss://localhost/htdocs/workerman/test.php' failed: Error in connection establishment: net::ERR_CONNECTION_REFUSED
不是很能理解這邊的連線方式,還請各位大大替我解惑,謝謝

看更多先前的討論...收起先前的討論...
player iT邦大師 1 級 ‧ 2019-08-27 18:56:14 檢舉
它就說連線失敗了, 你要查作為Server端的php有沒有正常動作(或是被防火牆檔到了?
cheer0101 iT邦新手 5 級 ‧ 2019-08-27 23:29:52 檢舉
我嘗試測試這個
<script>
const ws = new WebSocket('ws://localhost:8080');
ws.onopen = function () {
ws.send('Hello Server!');
}

ws.onclose = function(event) {
var code = event.code;
var reason = event.reason;
var wasClean = event.wasClean;
};

</script>
還是出現了
WebSocket connection to 'ws://localhost:8080/' failed: Error during WebSocket handshake: Unexpected response code: 200
錯誤
DanSnow iT邦新手 4 級 ‧ 2019-08-28 08:27:41 檢舉
websocket 需要特別的處理才有辦法連線,如果你要用 php 寫去看看 swoole 這個東西
淺水員 iT邦新手 2 級 ‧ 2019-08-28 15:52:48 檢舉
handshake 就錯誤了,這代表伺服器沒照 websocket 的規範實作。
fillano iT邦超人 1 級 ‧ 2019-08-29 11:01:17 檢舉
那篇文章的程式是用socket從最底層建立websocket伺服器,你恐怕要參考:RFC-6455看一下他程式裡面handshake部份是不是有問題。另外,瀏覽器的開發人員工具應該可以看到handshake雙方送出的資料,你可以手動驗證。

如果怕麻煩,用現有的工具來建立還是比較好。(上面已經有人建議了,回答也是建議同一個工具)
fillano iT邦超人 1 級 ‧ 2019-08-29 11:17:20 檢舉
handshake的時候,client會在Sec-WebSocket-Key標頭送出一個用base64編碼過的十六個位元組長的隨機資料,server回應時要把這一字串加上RFC指定的GUID字串取sha1後用base64編碼,再放到Sec-WebSocket-Accept標頭回傳。

我看他woshou函數裡面些的程式應該是沒問題才對,不過真要檢驗的話,還是需要跑跑看才知道。
fillano iT邦超人 1 級 ‧ 2019-08-29 11:22:13 檢舉
他程式回傳的狀態101是寫死的,所以你會收到200就很奇怪了。他寫的是:

$new_message = "HTTP/1.1 101 Switching Protocols\r\n";

這還要看你是否有修改了什麼,或是你怎麼執行他的程式?他這個不是放在http server裡面跑的東西。
fillano iT邦超人 1 級 ‧ 2019-08-29 11:36:08 檢舉
我試跑了一下他的程式,沒有問題喔。php程式你要用console來執行,例如php -f websocket.php。html你就放在你本地端的http伺服器來看就可以。
fillano iT邦超人 1 級 ‧ 2019-08-29 11:39:27 檢舉
另外,他程式是不支援ssl連線的,所以不能用wss來連。

2 個回答

1
混水摸魚
iT邦新手 1 級 ‧ 2019-08-28 08:42:09

這個給你參考參考:https://www.webteach.tw/?p=2843

0
fillano
iT邦超人 1 級 ‧ 2019-08-29 12:04:17

我在討論寫了不少,所以不重複,這裡只是給你看我執行的結果。我還是建議你使用上面幾位建議的工具就是了。

我跑的結果:
瀏覽器看到的畫面

php程式在console執行的訊息:
console看到的畫面

我要發表回答

立即登入回答