Node.js:通过socketio将客户端与服务器断开连接

时间:2019-10-17 05:43:01

标签: node.js websocket socket.io

我试图使用socket.io实时发送数据,以便创建服务器:

const http = require('http').createServer();
const socket = require('socket.io')(http);

socket.on('connection', socket => {

    console.log('connected:', socket.client.id);

    socket.on('start', data => {
        console.log('new message from client:', data);
    });

    socket.on("disconnect", () => console.log("Client disconnected"));
});

http.listen(3000, () => console.log(`server listening on port: ${3000}`))

在客户端,我创建此脚本:

const socket = require('socket.io-client')('http://localhost:3000');

socket.on('connect', () => {
    // socket connected
    socket.emit('start', { my: 'data' });
    setInterval(() => {
        socket.disconnect();
    }, 1000);

});

想像一下,客户端连接到服务器并将数据发送到服务器后要与服务器断开连接,所以我输入以下命令:

setInterval(() => {
    socket.disconnect();
}, 1000);

执行此命令时出现此错误:

D:\Projects\NodeJs\SafaProjects\socket\client>node client.js
D:\Projects\NodeJs\SafaProjects\socket\client\node_modules\socket.io-client\lib\socket.js:136
Socket.prototype.emit = function (ev) {
                                 ^

RangeError: Maximum call stack size exceeded
    at Socket.emit (D:\Projects\NodeJs\SafaProjects\socket\client\node_modules\socket.io-client\lib\socket.js:136:34)
    at Socket.socket.on (D:\Projects\NodeJs\SafaProjects\socket\client\client.js:13:12)     
    at Socket.Emitter.emit (D:\Projects\NodeJs\SafaProjects\socket\client\node_modules\component-emitter\index.js:133:20)
    at Socket.emit (D:\Projects\NodeJs\SafaProjects\socket\client\node_modules\socket.io-client\lib\socket.js:138:10)
    at Socket.socket.on (D:\Projects\NodeJs\SafaProjects\socket\client\client.js:13:12)     
    at Socket.Emitter.emit (D:\Projects\NodeJs\SafaProjects\socket\client\node_modules\component-emitter\index.js:133:20)
    at Socket.emit (D:\Projects\NodeJs\SafaProjects\socket\client\node_modules\socket.io-client\lib\socket.js:138:10)
    at Socket.socket.on (D:\Projects\NodeJs\SafaProjects\socket\client\client.js:13:12)     
    at Socket.Emitter.emit (D:\Projects\NodeJs\SafaProjects\socket\client\node_modules\component-emitter\index.js:133:20)
    at Socket.emit (D:\Projects\NodeJs\SafaProjects\socket\client\node_modules\socket.io-client\lib\socket.js:138:10)

客户端如何正确连接服务器?

1 个答案:

答案 0 :(得分:1)

因为您再次致电 DECLARE @test nvarchar(180) DECLARE @prno nvarchar(50) DECLARE @dte date DECLARE @tst nvarchar(180) DECLARE cr_testd CURSOR FOR SELECT cust_id,pr_no,date FROM tbl_Test_Details; DECLARE cr_tests CURSOR FOR SELECT test_name FROM tbl_tests OPEN cr_testd FETCH NEXT FROM cr_testd into @cid,@prno,@dte OPEN cr_tests WHILE @@FETCH_STATUS = 0 BEGIN FETCH NEXT FROM cr_tests into @tst WHILE @@FETCH_STATUS=0 BEGIN Insert into tbl_Test_Details values(@cid,@tst,@prno,@dte) IF (@@ROWCOUNT <= 0) BEGIN BREAK END FETCH NEXT FROM cr_tests into @tst END FETCH NEXT FROM cr_tests into @tst END CLOSE cr_test DEALLOCATE cr_test``` Current State of Tables Tbl_Test_details Tbl_Tests |--------------------| |-----------| |pr_no c_id Tests | | Tests | |--------------------| |-----------| |1 100 MDD | | MDD | |1 100 FDT | | FDT | |2 101 DMC | | DMC | | CDD | Result Table tbl_test_details |--------------------| |pr_no c_id Tests | |--------------------| |1 100 MDD | |1 100 FDT | |1 100 DMC | |1 100 CDD | |2 101 MDD | |2 101 FDT | |2 101 DMC | |2 101 CDD | 。为socket.disconnect()提供一个回调函数,您可以在其中调用socket.emit()

服务器

socket.disconnect

客户端

const http = require('http').createServer();
const socket = require('socket.io')(http);

socket.on('connection', socket => {

    console.log('connected:', socket.client.id);

    socket.on('start', data => {
        console.log('new message from client:', data);
        socket.emit ('messageSuccess', data);
    });

    socket.on("disconnect", () => console.log("Client disconnected"));
});

http.listen(3000, () => console.log(`server listening on port: ${3000}`))