1. Introdução
Primeiro de tudo, o site oficial do Socket.io: http://socket.io
O site oficial é muito conciso e nem há documentação da API, apenas um simples "como usar" para se referir. Porque o Socket.io é tão simples e fácil de usar quanto o site oficial.
Então, o que é soquete.io? O Socket.io é uma biblioteca da WebSocket que inclui JS do lado do cliente e NodeJs do lado do servidor. Seu objetivo é criar aplicativos em tempo real que possam ser usados em diferentes navegadores e dispositivos móveis. Ele escolherá automaticamente a melhor maneira de realizar o aplicativo de rede em tempo real com base no navegador de vários métodos, como WebSocket, Ajax Long Polling, Iframe Streaming etc., que é muito conveniente e fácil de usar. Os navegadores suportados são tão baixos quanto o IE5.5, que devem atender à maioria das necessidades.
2. Instalação e implantação
2.1 Instalação
Primeiro de tudo, a instalação é muito simples, no ambiente Node.js, apenas uma frase:
A cópia do código é a seguinte:
NPM Install Socket.io
2.2 Combinando o Express para construir um servidor
O Express é uma estrutura de aplicativo da Web Node.JS pequena, que é frequentemente usada ao criar servidores HTTP, por isso é explicado diretamente com soquete.io e expresso como exemplos.
A cópia do código é a seguinte:
var express = requer ('expresso')
, app = express ()
, servidor = requer ('http').
, io = requer ('socket.io'). Ouça (servidor);
Server.Listen (3001);
Se você não usar o Express, consulte o Socket.io/#how-to-use
3. Método de uso básico
Ele é dividido principalmente em duas partes de código: lado do servidor e do lado do cliente, ambas muito simples.
Servidor (App.js):
A cópia do código é a seguinte:
// Conecte o código acima
App.get ('/', function (req, res) {
res.sendfile (__ dirname + '/index.html');});
io.sockets.on ('conexão', função (soquete) {
Socket.emit ('News', {Hello: 'World'});
Socket.on ('Outro evento', função (dados) {
console.log (dados);
});
});
Primeiro, a função io.sockets.on aceita a string "conexão" como o evento em que o cliente inicia a conexão. Quando a conexão é bem -sucedida, a função de retorno de chamada com parâmetros de soquete é chamada. Quando usamos o Socket.io, basicamente lidamos com solicitações de usuário nesta função de retorno de chamada.
A coisa mais importante sobre o soquete é emiti e ligada. O primeiro envia (emite) um evento (o nome do evento é representado por uma string). O nome do evento pode ser personalizado e existem alguns nomes de eventos padrão, seguidos por um objeto, indicando o conteúdo enviado ao soquete; Este último recebe um evento (o nome do evento é representado por uma string), seguido por uma função de retorno de chamada que recebe a chamada do evento, onde os dados são os dados recebidos.
No exemplo acima, enviamos o evento de notícias e recebemos o outro evento, para que o cliente deve ter eventos de receber e enviar e enviar. Sim, o código do cliente é exatamente o oposto e muito semelhante ao servidor.
Cliente (client.js)
A cópia do código é a seguinte:
<script src = "/socket.io/socket.io.js"> </script>
<Cript>
var soket = io.connect ('http: // localhost');
Socket.on ('News', function (dados) {
console.log (dados);
soket.emit ('outro evento', {my: 'data'});
});
</script>
Há duas coisas a serem observadas: o caminho do soquete.io.js precisa ser escrito corretamente. Este arquivo JS é realmente colocado na pasta Node_modules no lado do servidor. Será redirecionado ao solicitar este arquivo. Portanto, não se surpreenda que esse arquivo não exista no lado do servidor, mas por que ainda funciona normalmente. Obviamente, você pode copiar o arquivo Socket.io.js do lado do servidor para localmente e torná-lo um arquivo JS do lado do cliente, para que você não precise solicitar esse arquivo JS do servidor Node sempre, o que aprimora a estabilidade. O segundo ponto é usar var soket = io.connect ('endereço do site ou ip'); Para obter o objeto de soquete e, em seguida, você pode usar o soquete para enviar e receber eventos. Em relação ao processamento de eventos, o código acima significa que, após o recebimento do evento "News", os dados recebidos são impressos e o evento "outro evento" é enviado ao servidor.
NOTA: O nome de evento padrão interno, como "desconexão", significa que a conexão do cliente está desconectada, "mensagem" significa que a mensagem é recebida etc. Para nomes de eventos personalizados, tente não dobrar o nome com os nomes de eventos padrão incorporados em soquete.io, para não causar problemas desnecessários.
4. Outras APIs comuns
1). Transmitido para todos os clientes: Socket.broadcast.emit ('Mensagem de transmissão');
2). Entre em uma sala (muito fácil de usar! É equivalente a um espaço para nome, que pode ser transmitido para uma sala específica sem afetar os clientes em outras salas ou não na sala): Socket.Join ('Nome do seu quarto');
3). Mensagem de transmissão para uma sala (o remetente não pode receber a mensagem): Socket.broadcast.to ('Nome do seu quarto'). Emit ('Mensagem da sala de transmissão');
4). As mensagens de transmissão para uma sala (incluindo o remetente podem receber mensagens) (esta API pertence a io.sockets): io.sockets.in ('outro nome da sala'). Emit ('mensagem de sala de transmissão');
5). Force WebSocket Communication: (Client) Socket.send ('Hi'), (Server) Use Socket.on ('Mensagem', function (Data) {}) para receber.
5. Construa uma sala de bate -papo usando soquete.io
Finalmente, encerramos este artigo com um exemplo simples. O uso do Socket.io para construir uma sala de bate-papo é de cerca de 50 linhas de código, e o efeito de bate-papo em tempo real também é muito bom. Os seguintes códigos -chave são publicados:
Servidor (Socketchat.js)
A cópia do código é a seguinte:
// Um dicionário para conexão do cliente, quando um cliente se conecta ao servidor,
// Um soquete exclusivo será gerado e o dicionário manterá o mapeamento do SocketId para as informações do usuário (apelido, etc.)
var conexãolist = {};
exports.startChat = function (io) {
io.sockets.on ('conexão', função (soquete) {
// Salve o SocketID e o nome de usuário quando a conexão com o cliente
var socketID = soquete.id;
ConnectionList [SocketId] = {
Soquete: soquete
};
// O usuário entra no evento da sala de bate -papo e transmite seu nome de usuário para outros usuários online
Socket.on ('Join', função (dados) {
Socket.broadcast.emit ('Broadcast_join', dados);
ConnectionList [SocketId] .username = data.username;
});
// O usuário deixa o incidente na sala de bate -papo e transmite sua partida para outros usuários online
Socket.on ('Desconect', function () {
if (ConnectionList [SocketId] .username) {
Socket.broadcast.emit ('Broadcast_quit', {
Nome de usuário: ConnectionList [SocketId] .username
});
}
excluir o ConnectionList [SocketId];
});
// Incidente do discurso do usuário, transmite o conteúdo de seu discurso para outros usuários online
Socket.on ('diga', função (dados) {
Socket.broadcast.emit ('Broadcast_say', {
Nome de usuário: ConnectionList [SocketId] .username,
texto: data.text
});
});
})
};
Cliente (Socketchatclient.js)
A cópia do código é a seguinte:
var soket = io.connect ('http: // localhost');
// Depois de conectar -se ao servidor, envie um evento de "ingressar" imediatamente e diga aos outros seu nome de usuário
Socket.emit ('Join', {
nome de usuário: 'nome de usuário hehe'
});
// Depois de receber a transmissão de ingressar na sala de bate -papo, a mensagem será exibida
Socket.on ('Broadcast_join', função (dados) {
console.log (data.username + 'adicionado à sala de bate -papo');
});
// Depois de receber a transmissão saindo da sala de bate -papo, a mensagem é exibida
Socket.on ('Broadcast_quit', function (dados) {
console.log (data.username + 'deixe a sala de bate -papo');
});
// Depois de receber uma mensagem enviada por outra pessoa, a mensagem será exibida
Socket.on ('Broadcast_say', function (dados) {
console.log (data.username + 'diga:' + data.text);
});
// Aqui assumimos que existe uma caixa de texto textarea e um botão de envio.btn-send
// Evento de ligação usando jQuery
$ ('. btn-send'). Clique (função (e) {
// Obtenha texto da caixa de texto
Var text = $ ('textarea'). val ();
// Envie um evento Say e o servidor o transmitirá quando o receber.
Socket.emit ('Siga', {
nome de usuário: 'nome de usuário hehe'
texto: texto
});
});
Esta é uma demonstração simples da sala de bate -papo que você pode expandir como deseja. Socket.io é basicamente o processamento de envio e recepção de vários eventos, e a idéia é muito simples.