socket.ioクラスライブラリは、互いにメッセージを送信するだけでなく、ソケットポートオブジェクトのエミットメソッドを介してイベントを互いに送信できます。
エミットは、以前のイベントで次のように述べています。エミットはイベントを手動でトリガーするために使用されます。
コードコピーは次のとおりです。
socket.emit(event、data、function(data1、data2 ......){
});
EMITメソッドを使用してイベントを送信する場合、反対側のソケットポートオブジェクトのONメソッドを使用して、一度の方法で聞くことができます。
コードコピーは次のとおりです。
socket.on(event、function(data、fn){
});
socket.once(event、function(data、fn){
})
上記のコールバック関数のパラメーターデータ:相手が送信したイベントで伝えられたデータ、
FN:イベントを送信するときに相手が指定したコールバックコールバック関数。
ケース1:サーバーとクライアントが接続された後、ニュースイベントがクライアントに送信され、オブジェクトがイベントに携帯され、オブジェクトのhello属性値は「hello」です。クライアントが私の他のイベントイベントを送信すると、「サーバーがデータを受信する」はコンソールに出力され、クライアントに携帯されるデータがイベントを送信します。
サーバー側のコード、server.js
コードコピーは次のとおりです。
var http = require( "http");
var sio = require( "socket.io");
var fs = require( "fs");
var server = http.createserver(function(req、res){
res.writehead(200、{"content-type": "text/html"});
res.End(fs.readfilesync( "./ index.html"));
});
server.listen(1337);
var socket = sio.listen(server);
socket.on( "connection"、function(socket){
socket.emit( "news"、{hello: "hello"});
socket.on( "私の他のイベント"、function(data){
console.log( "サーバーは情報%j"、dataを受け入れる);
});
});
クライアントindex.htmlコード:
コードコピーは次のとおりです。
<!doctype html>
<html>
<head lang = "en">
<メタcharset = "utf-8">
<title> </title>
<スクリプトsrc = "/socket.io/socket.io.js"> </script>
<スクリプト>
var socket = io.connect();
socket.on( "news"、function(data){
console.log(data.hello);
socket.emit( "My Other Event"、{my: "data"});
});
</script>
</head>
<body>
</body>
操作結果:
見つけることができることの1つは、マニュアル側ではなく、常にリスニング側にあるということです。
ケース2:相手のイベントが手動でトリガーされたら、コールバック関数を指定します。
クライアントとサーバーが接続されると、SetNameイベントがクライアントに送信されます。このイベントには「Zhang San」があります。イベントがトリガーされると、コールバック関数が指定され、2つのパラメーター値がコンソールに出力されます。
コードコピーは次のとおりです。
var http = require( "http");
var sio = require( "socket.io");
var fs = require( "fs");
var server = http.createserver(function(req、res){
res.writehead(200、{"content-type": "text/html"});
res.End(fs.readfilesync( "./ index.html"));
});
server.listen(1337);
var socket = sio.listen(server);
socket.on( "connection"、function(socket){
socket.emit( "setName"、 "Zhang San"、function(data1、data2){
console.log(data1);
console.log(data2);
});
});
コードコピーは次のとおりです。
<!doctype html>
<html>
<head lang = "en">
<メタcharset = "utf-8">
<title> </title>
<スクリプトsrc = "/socket.io/socket.io.js"> </script>
<スクリプト>
var socket = io.connect();
socket.on( "setName"、function(name、fn){
console.log(name);
fn( "li si"、 "wang wu");
});
</script>
</head>
<body>
</body>
</html>
実行結果:
コールバック関数は、実際にトリガーエンドで実行されます。