La biblioteca de clases Socket.io no solo puede enviarse mensajes entre sí, sino también enviarse eventos entre sí a través del método EMIT del objeto de puerto Socket.
EMIT dijo en el evento anterior que ahora dice: EMIT se usa para desencadenar eventos manualmente.
La copia del código es la siguiente:
Socket.emit (evento, datos, función (data1, data2 ......) {
});
Al enviar eventos utilizando el método EMIT, puede usar el método ON del objeto de puerto de socket en el otro extremo para escuchar en el método Once.
La copia del código es la siguiente:
Socket.on (evento, función (Data, FN) {
});
Socket.once (evento, función (Data, FN) {
})
Los datos de parámetros en la función de devolución de llamada anterior: los datos realizados en el evento enviado por la otra parte,
FN: La función de devolución de llamada de devolución de llamada especificada por la otra parte al enviar un evento.
Caso 1: Después de que el servidor y el cliente están conectados, se envía un evento de noticias al cliente y se lleva a cabo un objeto en caso de que el valor de atributo Hello del objeto sea "Hola". Cuando el cliente envía mi otro evento de evento, el "servidor recibe datos" se emite en la consola + los datos transportados en el cliente envían el evento.
Código del lado del servidor, server.js
La copia del código es la siguiente:
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"));
});
servidor.listen (1337);
var socket = sio.listen (servidor);
socket.on ("conexión", función (socket) {
Socket.emit ("News", {Hola: "Hola"});
Socket.on ("My Other Event", Function (Data) {
console.log ("El servidor acepta información %j", datos);
});
});
Código de client index.html:
La copia del código es la siguiente:
<! Doctype html>
<html>
<head lang = "en">
<meta charset = "utf-8">
<title> </title>
<script src = "/Socket.io/socket.io.js"> </script>
<script>
var enchock = io.connect ();
Socket.on ("News", function (Data) {
console.log (data.hello);
Socket.emit ("My Other Event", {my: "data"});
});
</script>
</ablo>
<Body>
</body>
Resultados de la operación:
Una cosa que puede encontrar es que la ejecución siempre está en el lado de escucha, no en el lado manual.
Caso 2: Cuando el evento de la otra parte se active manualmente, especifique la función de devolución de llamada.
Cuando el cliente y el servidor están conectados, el evento SetName se envía al cliente. El evento lleva "Zhang San". Cuando se activa el evento, se especifica una función de devolución de llamada, que genera 2 valores de parámetros a la consola.
La copia del código es la siguiente:
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"));
});
servidor.listen (1337);
var socket = sio.listen (servidor);
socket.on ("conexión", función (socket) {
Socket.emit ("setname", "zhang san", function (data1, data2) {
console.log (data1);
console.log (data2);
});
});
La copia del código es la siguiente:
<! Doctype html>
<html>
<head lang = "en">
<meta charset = "utf-8">
<title> </title>
<script src = "/Socket.io/socket.io.js"> </script>
<script>
var enchock = io.connect ();
Socket.on ("setname", function (name, fn) {
console.log (nombre);
fn ("li si", "wang wu");
});
</script>
</ablo>
<Body>
</body>
</html>
Resultados de la ejecución:
La función de devolución de llamada en realidad se ejecuta en el extremo activador.