netライブラリとWebSocketをブラウザで使用してソケットノードサーバーを実装しています。 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
ServerはHello Server
をログに記録することはできませんヘッダーの代わりにクライアントからもサーバーの損失クライアントのメッセージをすぐに.. ..お手伝いください!
ソケットtcp regular(リクエストは特別ではありません)を作成したいと思います。私はソケットioを使用していましたが、ソケットioとソケットioクライアントの間でのみ通信します。どのようにブラウザでソケットtcpを定期的に作成するのですか? – Loint
@ Ntlzz93できません。 – robertklep