套接字 Io 在 Node js 中僅限制 6 個連接

薩利克薩利姆

所以我遇到了一個問題。我試圖將 {id} 發送到我的其餘 API(節點 js),作為響應,我在套接字上獲取數據。

問題:前 5-6 次它工作得很好並顯示 Id 並將數據發送回套接字。但 6 次後它沒有得到 ID。我試過這個https://github.com/socketio/socket.io/issues/1145https://github.com/socketio/socket.io/issues/1145但沒有解決問題。在重新編譯服務器時,它會顯示我在 6 次之後輸入的先前 {ids}。就像在 5-6 次之後,它以某種形式的緩存存儲 id。這是我的 API 路線。//這條路線只獲得{id} 5-6次。5-6次後不顯示接收{id}。

const express = require("express");
var closeFlag = false;
const PORT = process.env.SERVER_PORT; //|| 3000; 
const app = express();
var count = 1;
http = require('http');
http.globalAgent.maxSockets = 100;
http.Agent.maxSockets = 100;
const serverTCP = http.createServer(app)

// const tcpsock = require("socket.io")(serverTCP)
const tcpsock = require('socket.io')(serverTCP, {
  cors: {
    origin: '*',
  }
  ,  perMessageDeflate: false 
});
app.post("/getchanneldata", (req, res) => {
  console.log("count : "+count)

  count++;// for debugging purpose
  closeFlag = false;
  var message = (req.body.val).toString()
  console.log("message : "+message);
  chanId = message;

  client = dgram.createSocket({ type: 'udp4', reuseAddr: true });
  client.on('listening', () => {
    const address = client.address();
  });


  client.on('message', function (message1, remote) {


    var arr = message1.toString().split(',');
    
    }
  }); 

  client.send(message, 0, message.length, UDP_PORT, UDP_HOST, function (err, bytes) {
    if (err) throw err;
    console.log(message);
    console.log('UDP client message sent to ' + UDP_HOST + ':' + UDP_PORT);
    // message="";
  });


  client.on('disconnect', (msg) => {
    client.Diconnected()
    client.log(client.client)


  })
}
);
jfriend00

這裡有多個問題。

在您的app.post()處理程序中,您不會對傳入的 http 請求發送任何響應。這意味著當瀏覽器(或任何客戶端)向您的服務器發送 POST 時,客戶端坐在那裡等待響應,但該響應永遠不會到來。

同時,瀏覽器對同時向同一主機發送的請求數有限制(我認為 Chrome 的限制恰好是 6)。一旦達到該限制,瀏覽器就會對請求進行排隊,並等待先前的連接之一返回其響應,然後再發送另一個連接。最終(經過很長時間),這些連接將超時,但這需要一段時間。

因此,首先要解決的是在app.post()處理程序中發送響應即使你只是這樣做res.send("ok");這將允許第 7 次和第 8 次等請求立即發送到您的服務器。每個傳入的 http 請求都應該有一個響應發送給它,即使您沒有什麼可發送的,只需執行res.end(). 否則,http 連接將掛起,消耗資源並等待最終超時。


另外,您的app.post()處理程序包含以下內容:

client = dgram.createSocket({ type: 'udp4', reuseAddr: true });

這有幾個問題。首先,你永遠不會聲明變量,client所以它變成了一個隱式的全局變量(這在服務器中真的很糟糕)。這意味著對app.post()處理程序的連續調用將覆蓋該變量。

其次,從包含的代碼中不清楚您何時關閉該 udp4 套接字。服務器本身似乎從未關閉它。

第三,您在每次 POST 到/getchanneldata. 這真的是正確的設計嗎?如果您的服務器收到其中的 20 個請求,它將打開 20 個單獨的 UDP 連接。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

node.js-使用头盔为socket.io(Web套接字)正确的内容安全策略

从node.js中的套接字读取前N个字节

Chrome扩展套接字io节点js

Node.js网络套接字+不带socket.io的websocket

在Node.js中将socket.io与网络套接字一起使用

如何最好地在Node.js中实现套接字客户端并中继到前端?

刷新页面时,套接字IO建立多个连接-Node JS

套接字io,node.js

如何在Node.js Stompit中检查套接字连接是否可用

如何使用连接到套接字的socket.id发送多个客户端(Node.js,Socket.io)

Node.js-错误:套接字挂断

如何在Node.js中强制重置套接字?

使用node.js应用和套接字io进行水平缩放

Node.js中的套接字构造器问题

Flutter套接字IO无法连接到Node JS套接字IO服务器

如何在node.js应用程序中管理套接字的数量?

断开node.js中以前的客户端socket.io套接字的连接

使用https的Node.js中的套接字挂起错误

node.js服务中socket.io事件使用的套接字

使用Socket.io将套接字传递到Node.js中的模块

套接字io Websocket断开节点js

在Node.JS中设置客户端套接字的本地地址

Node.JS,套接字IO:相同的源策略错误

表达js-套接字io连接

套接字io(node.js)库是否提供保持活动连接。

Socket.io从Node中的多个套接字接收数据

node.js 子进程中的 socket.io-client Web 套接字连接失败

Socket.io Node.js 如何将套接字发送给特定用户?

如果无法在 node.js 和 socket.io 中建立到服务器的连接,如何关闭套接字?