A biblioteca de classes Socket.io pode não apenas enviar mensagens um para o outro, mas também enviar eventos um para o outro através do método Emit do objeto da porta de soquete.
Emit disse no evento anterior que agora diz: Emit é usado para desencadear manualmente eventos.
A cópia do código é a seguinte:
Socket.emit (evento, dados, função (data1, data2 ......) {
});
Ao enviar eventos usando o método Emit, você pode usar o método ON do objeto da porta de soquete na outra extremidade para ouvir no método Once Once.
A cópia do código é a seguinte:
Socket.on (evento, função (dados, fn) {
});
Socket.once (evento, função (dados, fn) {
})
Os dados dos parâmetros na função de retorno de chamada acima: os dados transportados no evento enviado pela outra parte,
FN: A função de retorno de chamada especificada pela outra parte ao enviar um evento.
Caso 1: Depois que o servidor e o cliente estão conectados, um evento de notícias é enviado ao cliente e um objeto é transportado no evento, e o valor do atributo Hello do objeto é "Hello". Quando o cliente envia meu outro evento, o "servidor recebe dados" é emitido no console + os dados transportados no cliente envia o evento.
Código do lado do servidor, Server.js
A cópia do código é a seguinte:
var http = requer ("http");
var sio = requer ("soket.io");
var fs = requer ("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 soket = sio.listen (servidor);
Socket.on ("conexão", função (soquete) {
Socket.emit ("News", {hello: "Hello"});
Socket.on ("meu outro evento", função (dados) {
console.log ("O servidor aceita informações %j", dados);
});
});
Código do cliente Index.html:
A cópia do código é a seguinte:
<! Doctype html>
<html>
<head lang = "en">
<meta charset = "utf-8">
<Title> </title>
<script src = "/socket.io/socket.io.js"> </script>
<Cript>
var soket = io.connect ();
Socket.on ("News", function (dados) {
console.log (data.hello);
Socket.emit ("Meu outro evento", {my: "Data"});
});
</script>
</head>
<Body>
</body>
Resultados da operação:
Uma coisa que você pode encontrar é que a execução está sempre do lado da audição, não do lado manual.
Caso 2: Quando o evento da outra parte for acionado manualmente, especifique a função de retorno de chamada.
Quando o cliente e o servidor estão conectados, o evento SetName é enviado ao cliente. O evento carrega "Zhang San". Quando o evento é acionado, uma função de retorno de chamada é especificada, que gera 2 valores de parâmetros para o console.
A cópia do código é a seguinte:
var http = requer ("http");
var sio = requer ("soket.io");
var fs = requer ("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 soket = sio.listen (servidor);
Socket.on ("conexão", função (soquete) {
Socket.emit ("SetName", "Zhang San", função (Data1, Data2) {
console.log (data1);
console.log (data2);
});
});
A cópia do código é a seguinte:
<! Doctype html>
<html>
<head lang = "en">
<meta charset = "utf-8">
<Title> </title>
<script src = "/socket.io/socket.io.js"> </script>
<Cript>
var soket = io.connect ();
Socket.on ("setName", function (nome, fn) {
console.log (nome);
fn ("li si", "wang wu");
});
</script>
</head>
<Body>
</body>
</html>
Resultados da execução:
A função de retorno de chamada é realmente executada na extremidade do gatilho.