java socket.io实现即时通讯_9、socket.io,websocket 前后端实时通信,(聊天室的实现)

websocket 一种通信协议

ajax/jsonp 单工通信

websocket 全双工通信 性能高 速度快

2种方式:

1、前端的websocket

2、后端的 socket.io

一、后端socket.io

cnpm i socket.io

接收on  发送emit ——可以发送任意类型的数据

后端:

1、创建httpServer

2、创建wsServer var ws = io(httpServer);

3、连接

ws.on("connect",function(socket){

//45 发送或者接收

发送 socket.emit("名称",数据);

广播 socket.broadcast.emit("名称",数据);

接收 socket.on(名称,function(data——数据){

});

});

前端:

1、引入js src="/socket.io/socket.io.js"

2、连接

var ws = io("ws://ip:port");

3、发送接收 on/emit

聊天室:

chat.html

无标题文档

*{padding:0;margin:0;list-style:none;}

#div1{ position:relative;width:500px; height:400px; border:1px solid red;}

#text{ position:absolute;left:0;bottom:0;width:80%; height:100px;}

#btn1{ position:absolute;right:0;bottom:0;width:20%; height:100px;}

#ul1{width:100%; height:300px; background:#ccc; overflow-y:auto;}

#ul1 li{ line-height:30px; border-bottom:1px dashed red;}

//var ws = io("ws://10.30.155.92:9000");

//var ws = io("http://10.30.155.92:9000");

//var ws = io();

var ws = io.connect("ws://10.30.155.92:9000");//标准写法 ws://

window.onload = function(){

var oUl = document.getElementById("ul1");

var oText = document.getElementById("text");

var oBtn = document.getElementById("btn1");

var name = prompt("请输入你的用户名")//"张三";

oBtn.onclick = function(){

//发送数据

var data = {name:name,value:oText.value};

ws.emit("msg",data);

createLi(data);

};

//接收数据 1创建dom

ws.on("msg_all",function(data){

console.log(data);

createLi(data);

});

function createLi(data){

//创建dom

var oLi = document.createElement("li");

oLi.innerHTML = `${data.name} ${data.value}`;

oUl.appendChild(oLi);

oUl.scrollTop = oUl.scrollHeight;

}

};

chat.js

var http = require("http");

var io = require("socket.io");

var fs = require("fs");

//创建http服务

var httpServer = http.createServer(function(req,res){

var url = req.url;

fs.readFile("www"+url,function(err,data){

if(err){

res.end("404");

} else {

res.end(data);

}

});

});

httpServer.listen(9000);

//创建websockt服务

var ws = io(httpServer);

ws.on("connection",function(socket){

console.log("wsServer");

//接收数据

socket.on("msg",function(data){

console.log(data);

//发送数据广播

socket.broadcast.emit("msg_all",data);

});

});

前端H5 WebSocket

ws: http

wss:https

前端配置:

var ws = new WebSocket("ws://ip:port");

ws.onopen = function(evt) {

console.log("Connection open ...");

ws.send("Hello WebSockets!");

};

ws.onmessage = function(evt) {

console.log( "Received Message: " + evt.data);

ws.close();

};

ws.onclose = function(evt) {

console.log("Connection closed.");

};

后端:npm i ws

npm i ws

var wss = new WebSocket({server:httpServer});

wss.on("connection",function(ws,req){

发送 接收

接收

ws.onmessage(function(ev){

//数据 ev.data

});

发送:

ws.send(数据);

数据 最好只能是字符串!!!

});

exp:

h5.html

无标题文档

var ws = new WebSocket("ws://localhost:9000");

//建立连接

ws.onopen = function(ev) {

console.log("连接成功");

};

//接收数据

ws.onmessage = function(ev) {

console.log( "接收数据",ev.data);//server--->client

//发送数据

//ws.send("client--->server");

try{

//只处理json

var json = JSON.parse(ev.data);

console.log(json);

if(json.type == "click"){

var oSpan = document.getElementById("s1");

oSpan.innerHTML = json.value;

}

}catch(e){

}

};

//连接关闭

ws.onclose = function(evt) {

console.log("连接关闭");

};

window.onload = function(){

var oBtn = document.getElementById("btn1");

oBtn.onclick = function(){

//发送数据 只能发送字符串

ws.send(JSON.stringify({type:"click",value:"abc"}));

};

}

h5 WebSocket

1111

h5.js:

var http = require("http");

var WebSocket = require("ws");

var fs = require("fs");

//创建http服务

var httpServer = http.createServer(function(req,res){

var url = req.url;

fs.readFile("www"+url,function(err,data){

if(err){

res.end("404");

} else {

res.end(data);

}

});

});

httpServer.listen(9000);

//创建websockt服务

var wss = new WebSocket.Server({ server:httpServer });

wss.on('connection', function connection(ws) {

console.log("wsServer");

//发送 send

ws.send("server--->client");

//接收

ws.on('message', function(message) {

console.log(message);

//ws.send(message);

//广播

wss.clients.forEach(function(client) {

if (client.readyState === WebSocket.OPEN) {

client.send(message);

}

});

});

});

爱我所爱无怨无悔

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,你需要安装 channels 库。可以使用 pip 安装: ``` pip install channels ``` 然后,你需要在 Django 项目中添加 Channels 的配置。在 settings.py 中添加以下内容: ```python INSTALLED_APPS = [ # ... 'channels', ] ASGI_APPLICATION = 'your_project_name.routing.application' CHANNEL_LAYERS = { 'default': { 'BACKEND': 'channels_redis.core.RedisChannelLayer', 'CONFIG': { "hosts": [("127.0.0.1", 6379)], }, }, } ``` 接着,你需要创建一个路由文件。在项目根目录下创建一个 routing.py 文件,添加以下内容: ```python from channels.routing import ProtocolTypeRouter, URLRouter from django.urls import path application = ProtocolTypeRouter({ "websocket": URLRouter([ path("ws/your_url/", your_consumer), ]), }) ``` 其中,your_consumer 是你自定义的 consumer,后面会讲到。 现在,你需要创建 consumer。在你的应用下创建一个 consumers.py 文件,添加以下内容: ```python import json from channels.generic.websocket import AsyncWebsocketConsumer class YourConsumer(AsyncWebsocketConsumer): async def connect(self): await self.accept() async def disconnect(self, close_code): pass async def receive(self, text_data): data = json.loads(text_data) message = data['message'] await self.send(text_data=json.dumps({ 'message': message })) ``` 这个 consumer 是非常简单的,只是将收到的消息原样返回。你可以根据需要自定义它。 最后,你需要在你的模板中添加 WebSocket 连接。例如: ```javascript var socket = new WebSocket('ws://localhost:8000/ws/your_url/'); socket.onmessage = function(e) { var data = JSON.parse(e.data); console.log(data.message); } socket.onclose = function(e) { console.error('WebSocket closed unexpectedly'); }; ``` 这样,就可以在前后端之间实现实时通信了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值