国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

workerman無法給客戶端返回消息

schumyxp

現(xiàn)象描述:
服務(wù)器端通過Nginx做了代理。
客戶端能通過ws協(xié)議和后端連接上,但是一直顯示pending狀態(tài)??蛻舳藷o法收到服務(wù)器端返回的消息,但是服務(wù)器端能收到客戶端請(qǐng)求建立鏈接的消息。

此時(shí)如果客戶端調(diào)用發(fā)送方法,比如 $connection->send('welcome!'); 服務(wù)器端沒有異常,但是客戶端收不到。

當(dāng)停止workerman服務(wù)的時(shí)候,服務(wù)器端的消息反而能發(fā)送出去,此時(shí)客戶端也能收到消息。

也就是說,當(dāng)服務(wù)啟動(dòng)的狀態(tài)下,服務(wù)器發(fā)出去的消息都被阻塞了,并沒有發(fā)出去。請(qǐng)問這個(gè)問題怎么解決?

我試過單獨(dú)用workerman,不使用nginx做代理,一切正常。

PHP的代碼如下:

<?php
require __DIR__ . '/../../vendor/autoload.php';

use Workerman\Worker;

// 創(chuàng)建一個(gè)Websocket服務(wù)器
$ws_worker = new Worker("websocket://127.0.0.1:9100");

// 設(shè)置當(dāng)前Worker實(shí)例啟動(dòng)多少個(gè)進(jìn)程
$ws_worker->count = 4;

// 在新連接到來時(shí)發(fā)出
$ws_worker->onConnect = function($connection) {
    $connection->send('welcome!');
    echo "new connection from ip " . $connection->getRemoteIp() . "\n";
};

// 接收數(shù)據(jù)時(shí)發(fā)出
$ws_worker->onMessage = function($connection, $data) {
    //echo "{$data}\n";
    $connection->send('got!');
};

// 連接關(guān)閉時(shí)發(fā)出
$ws_worker->onClose = function($connection) {
    echo "Connection closed\n";
};

// 運(yùn)行worker
Worker::runAll();

Nginx的配置如下:

location /wss {
         proxy_pass http://127.0.0.1:9100;
         proxy_http_version 1.1;
         proxy_set_header Upgrade $http_upgrade;
         proxy_set_header Connection "Upgrade";
         proxy_set_header X-Real-IP $remote_addr;
}

前端請(qǐng)求如下:

/**
執(zhí)行這行代碼之后,服務(wù)器端會(huì)顯示 new connection from ip 127.0.0.1
此時(shí)瀏覽器會(huì)顯示wss的請(qǐng)求狀態(tài)是pending。
如果在這個(gè)時(shí)候把服務(wù)器的workerman停止,瀏覽器會(huì)顯示101狀態(tài),并且能收到服務(wù)器發(fā)送的welcome字符串
*/
let ws = new WebSocket('ws://wodeyuming/wss')
/*
如果此時(shí)調(diào)用這條,會(huì)報(bào)錯(cuò):Uncaught DOMException: Failed to execute 'send' on 'WebSocket': Still in CONNECTING state.
*/
ws.send(123)
1439 2 2
2個(gè)回答

schumyxp

實(shí)在搞不定,暫時(shí)先把Nginx去掉了。

  • 暫無評(píng)論
nitron

nginx的wss塊加一行

proxy_buffering off;
  • schumyxp 2023-08-18

    ????!確實(shí)有效

  • schumyxp 2023-08-23

    這個(gè)方法還是不太行啊。加上這行之后,只對(duì)第一次send起作用,后面再調(diào)用$connection->send,消息就發(fā)不出去了。不用Nginx的話一切正常。

年代過于久遠(yuǎn),無法發(fā)表回答
??