0
我正在瀏覽器中使用net庫和WebSockets實現套接字節點服務器。我成功使用telnet host
port
,但瀏覽器工作不正常。瀏覽器成功連接到套接字服務器併發送消息。我的服務器實現了一個data
事件,並立即觸發close
和end
事件。 close
,end
事件執行刪除客戶端時,他們斷開連接(關閉瀏覽器,連接鬆動...)。向套接字服務器發送消息後保持TCP套接字客戶端
我不希望瀏覽器發送消息,然後鬆開連接。 有誰知道這是什麼問題?
插槽服務器
var express = require('express');
var app = express();
var path = require('path');
var cors = require('cors');
var config = require(path.join(__dirname, '/config.json'));
var net = require('net');
app.use(cors());
var serverSocket = net.createServer(function(socket) {
socket.write('Connected socket server\r\n');
});
serverSocket.listen(3332,() => {
console.log('opened socket on', serverSocket.address());
});
var client = [];
serverSocket.on('connection', (conn) => {
console.log('client ', client.length, ' connected');
conn.id = Math.floor(Math.random() * 1000);
while (client.indexOf(conn) !== -1) {
// socket id exits
conn.id = Math.floor(Math.random() * 1000);
console.log('repeat');
}
client.push(conn);
console.log('client id ', conn.id);
conn.on('data', function(data) {
console.log(data.toString('utf8'));
});
conn.on('end', function() {
// client.splice(client.indexOf(conn), 1);
// console.log(conn.id + ' disconnected');
// console.log('clientArr ' + client);
});
conn.on('error', (err) => {
console.log("Caught flash policy server socket error: ");
console.log(err.stack);
});
conn.on('close', (e) => {
client.splice(client.indexOf(conn), 1);
console.log(conn.id + ' disconnected');
console.log('clientArr ' + client);
});
});
app.listen(config.port);
console.log('Server start on port: ' + config.port);
客戶端(瀏覽器)
<!DOCTYPE html>
<html>
<head>test</head>
<body>
<div class="">
<button>button</button>
</div>
<script type="text/javascript">
$(document).ready(function() {
// Create WebSocket connection.
const socket = new WebSocket('ws://192.168.0.111:3332');
// Connection opened
socket.addEventListener('open', function(event) {
socket.send('Hello Server!');
});
});
</script>
</body>
</html>
輸出時,瀏覽器連接到服務器
Server start on port: 6010
opened socket on { address: '::', family: 'IPv6', port: 3332 }
connecting mongoose
client 0 connected
client id 685
GET/HTTP/1.1
Host: 192.168.0.111:3332
Connection: Upgrade
Pragma: no-cache
Cache-Control: no-cache
Upgrade: websocket
Origin: http://localhost:8643
Sec-WebSocket-Version: 13
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.87 Safari/537.36
Accept-Encoding: gzip, deflate, sdch
Accept-Language: vi,en;q=0.8,zh-CN;q=0.6,zh;q=0.4,pt;q=0.2
Sec-WebSocket-Key: lNMRkgoSb8xOH5iuE/f4UA==
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
685 disconnected
clientArr
服務器無法登錄Hello Server
從客戶端而不是標題的東西也服務器丟失客戶端立即發送消息..請幫助!
我想創建一個套接字tcp常規(沒有請求特殊)。我曾經使用套接字io,但套接字io只是在套接字io和套接字io客戶端之間進行通信。如何在瀏覽器中定期創建一個套接字tcp。 – Loint
@ Ntlzz93這是不可能的。 – robertklep