websocket双向通信聊天

  • 更新时间:
  • 651人关注
  • 点击下载

这是一个不错的websocket类学习资源,由殳志勇 提供,主要知识点是关于websocket、通信聊天、websocket的内容,已被660人关注,同类资源中评分为7.1分。

websocket实例,内部含有详细使用说明以及代码注释。java写的websocket客户端,包含心跳监测。 此架包可解决问题:系统使用websocket 访问远程上的实时数据,但是有时候会停止更新实时数据,只要重启了自己的系统,就会继续更新数据了,此包可以完美解决此问题。

from clipboard

精选笔记:Django websocket原理及功能实现代码

5小时57分钟前回答

一 什么是Websocket

WebSocket是一种在单个TCP连接上进行全双工通信的协议

WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输

现在,很多网站为了实现推送技术,所用的技术都是轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的带宽等资源。

而比较新的技术去做轮询的效果是Comet。这种技术虽然可以双向通信,但依然需要反复发出请求。而且在Comet中,普遍采用的长链接,也会消耗服务器资源。

在这种情况下,HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯

二 Django实现Websocket

django实现websocket大致上有两种方式,一种channels,一种是dwebsocket。channels依赖于redis,twisted等,相比之下使用dwebsocket要更为方便一些

三 dwebsocket安装

pip3 install dwebsocket

四 dwebsocket配置

INSTALLED_APPS = [
  .....
  .....
  'dwebsocket',
]
 
MIDDLEWARE_CLASSES = [
  ......
  ......
  'dwebsocket.middleware.WebSocketMiddleware' # 为所有的URL提供websocket,如果只是单独的视图需要可以不选
 
]
WEBSOCKET_ACCEPT_ALL=True  # 可以允许每一个单独的视图实用websockets

五 使用

html代码:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>


<button onclick="WebSocketTest()">test</button>
</body>


<script>


  function WebSocketTest() {
    alert(1)
    if ("WebSocket" in window) {
      alert("您的浏览器支持 WebSocket!");

      // 打开一个 web socket
      ws = new WebSocket("ws://127.0.0.1:8000/path/");

      ws.onopen = function () {
        // Web Socket 已连接上,使用 send() 方法发送数据
        ws.send("发送数据");
        alert("数据发送中...");
      };

      ws.onmessage = function (evt) {
        var received_msg = evt.data;
        alert("数据已接收...");
        alert("数据:" + received_msg)
      };

      ws.onclose = function () {
        // 关闭 websocket
        alert("连接已关闭...");
      };
    }

    else {
      // 浏览器不支持 WebSocket
      alert("您的浏览器不支持 WebSocket!");
    }
  }
</script>
</html>

views视图层:

from django.shortcuts import render,HttpResponse

# Create your views here.
def login(request):
  return render(request,'login.html')

from dwebsocket.decorators import accept_websocket
@accept_websocket
def path(request):
  if request.is_websocket():
    print(1)
    request.websocket.send('下载完成'.encode('utf-8'))

路由层:

from django.conf.urls import url
from django.contrib import admin
from app01 import views
urlpatterns = [
  url(r'^admin/', admin.site.urls),
  url(r'^login/', views.login),
  url(r'^path/', views.path),
]

六 详解

#dwebsocket有两种装饰器:require_websocket和accept_websocekt,使用require_websocket装饰器会导致视图函数无法接收导致正常的http请求,一般情况使用accept_websocket方式就可以了,
#
# dwebsocket的一些内置方法:
#
# request.is_websocket():判断请求是否是websocket方式,是返回true,否则返回false
# request.websocket: 当请求为websocket的时候,会在request中增加一个websocket属性,
# WebSocket.wait() 返回客户端发送的一条消息,没有收到消息则会导致阻塞
# WebSocket.read() 和wait一样可以接受返回的消息,只是这种是非阻塞的,没有消息返回None
# WebSocket.count_messages()返回消息的数量
# WebSocket.has_messages()返回是否有新的消息过来
# WebSocket.send(message)像客户端发送消息,message为byte类型

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持码农之家。

展开阅读
精选笔记:node.js基于express使用websocket的方法

15小时52分钟前回答

本文实例讲述了node.js基于express使用websocket的方法。分享给大家供大家参考,具体如下:

这个效果我也是翻了好长时间的资料,测试才成功的,反正成功,大家看看吧

首先你需要安装socket.io模块

npm install socket.io --save

然后打开express的app.js将模块引入,在12行左右的

var app = express();

下面添加两行

var server = require('http').Server(app);
var io = require('socket.io')(server);

然后在20多行里面添加

app.use(function(req, res, next){
 res.io = io;
 next();
});

由于本人不喜欢从www里面启动,所以在app.js里面又添加了几行代码,添加到底部的倒数第二行以上

var port = 3000;
app.set('port', port);
server.listen(port);

这就开始监听3000端口了

这样,准备工作已经完成了,然后开始进行示例

用官方的示例代码测试,可以直接写到app.js里面

io.on('connection', function (socket) {
 socket.emit('news', { hello: 'world1' });
 socket.on('my other event', function (data) {
  console.log(data);
 });
});

服务端的准备工作已经完成,在客户端页面首先将socket.js文件引入

<script src='javascripts/socket.io-1.4.5.js'></script>
var socket = io.connect("//localhost:3000");
socket.on('news', function (data) {
  console.log(data);
  alert(data);
  socket.emit('my other event', { my: 'data' });
});

然后打开页面测试一下

如果想只在一个页面里服务端发送信息,可以这么写

router.get('/', function(req, res, next) {
  //只有当前页面可以获得
  res.io.on('connection', function(socket) {
    socket.emit('news', {
      hello: 'world'
    });
    socket.on('my other event', function(data) {
      console.log(data);
    });
  });
  //所有页面都可以获得
  var io = require("../app").io;
  io.emit("news",{hello:"myworld"});
  res.render("pclogin.ejs", {});
});

希望本文所述对大家nodejs程序设计有所帮助。

展开阅读

相关资源

  • 计算机通信原理与系统

    计算机通信原理与系统

    计算机通信原理与系统 作者:吴玲达杨冰杨征 国防科技大学 出版时间:2008/4/1 本书论述了计算机通信系统的基本原理和技术,主要内容包括:计算机通信系统的构成;计算机通信所涉及的基本理论;计算机通信中的标准接口;通信控制规程;通信系统的工作原理以及典型的计算机通信系统等。 本书可作为大学信息系统专业、计算机专业和通信专业高年级本科生的教材或参考书,也可供有关专业技术人员阅读。 目录 第一章绪论 1.1通信系统的基本概念

    大小:88.42 MB计算机

    立即下载
  • 数据通信与计算机网络(第2版)

    数据通信与计算机网络(第2版)

    数据通信与计算机网络(第2版)是由毛迪林,高传善,曹袖 编,2007年高等教育出版社出版。 本书自2000年出版以来已被许多学校采用为教材,并获2002年全国普通高等学校优秀教材一等奖。新版教材的编写重点虽然仍在数据通信与计算机网络的基础理论和技术,但简缩或删除了相对陈旧的内容,增加了对通信和网络新技术的介绍,如PPP、虚拟局域网(VLAN)、万兆以太网、光纤网络、高速交换技术、无线网络、组播、IPv6、XML、病毒与防范、多媒体网络技

    大小:9.17 MB数据通信

    立即下载
  • Learning WebRTC 中文版:用WebRTC开发交互实时通信应用

    Learning WebRTC 中文版:用WebRTC开发交互实时通信应用

    WebRTC 是一个支持网络浏览器进行实时语音对话或视频对话的软件架构。本书使用形象的案例介绍,逐步深入地阐述了 WebRTC 的幕后工作原理。通过阅读本书,读者可以快速、有效地掌握创建一

    大小:61.2 MBWebRTC

    立即下载
  • 《现代通信技术(上下册第二版)》教案课件习题

    《现代通信技术(上下册第二版)》教案课件习题

    本书比较全面地讲述现代通信领域的基本技术知识以及近代发展概况。全书共分上、下两册。上册内容包括:模拟信号数字化、电话交换技术、数据通信技术、现代通信网技术、Internet及宽带IP城域网、软交换及下一代网络技术。下册内容包括:同步数字体系、光纤通信、微波复用、光网络的发展趋势、数字微波通信、卫星移动通信、移动通信。每章讨论一个课题,除阐述其基本原理外,还讨论了与其相关的实际应用技术及其相关学科领域的技术发展。

    大小:2.5 MB通信技术

    立即下载
  • NFC:Arduino、Android与PhoneGap近场通信

    NFC:Arduino、Android与PhoneGap近场通信

    《NFC:Arduino、Android与PhoneGap近场通信》将带你走入近场通信(NFC)的世界,这是一种快速发展的技术,它能够让设备近距离交换数据或使用无线电信号。《NFC:Arduino、Android与PhoneGap近场通信》

    大小:35.3 MBNFC

    立即下载

学习笔记

21小时20分钟前回答

java使用websocket,并且获取HttpSession 源码分析(推荐)

一:本文使用范围 此文不仅仅局限于spring boot,普通的spring工程,甚至是servlet工程,都是一样的,只不过配置一些监听器的方法不同而已。 本文经过作者实践,确认完美运行。 二:Spring boot使用websocket 2.1:依赖包 websocket本身是servlet容器所提供的服务,所以需要在web容器中运行,像我们所使用的tomcat,当然,spring boot中已经内嵌了tomcat。 websocket遵循了javaee规范,所以需要引入javaee的包 dependency groupIdjavax/groupId artifactIdjavaee-api/artifactId version7.0/version scopeprovided/scope /dependency 当然,其实tomcat中已经自带了这个包。 如果是在spring boot中,还需要加入websocket的starter dependency groupIdorg.springframework.boot/groupId artifac……

3小时47分钟前回答

Django websocket原理及功能实现代码

一 什么是Websocket WebSocket是一种在单个TCP连接上进行全双工通信的协议 WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输 现在,很多网站为了实现推送技术,所用的技术都是轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是……

1小时43分钟前回答

WebSocket的简单介绍及应用

定时刷新的不足与改进 web开发中可能遇到这样的场景:网页里的某一块区域里写了一些内容,但这些内容不是固定的,即使看网页的人没有做任何操作,它们也会随时间不断变化。股票行情、活动或游戏的榜单都是比较常见的例子。 对此,一般的做法是用setTimeout()或setInverval()定时执行任务,任务内容是Ajax访问一次服务器,并在成功拿到返回数据后去更新页面。 这种定时刷新的做法会有这样一些感觉不足的地方: 频繁的定时网络请求对浏览器(客户端)和服务器来说都是一种负担,尤其是当网页里有多个定时刷新区域的时候。 某几次的定时任务可能是不必要的,因为服务器可能并没有新数据,还是……