WebSocket消息推送(实现进行聊天)和WebSocket简介

WebSocket简介

WebSocket是HTML5开始提供的一种浏览器与服务器间进行全双工通讯的网络技术。依靠这种技术可以实现客户端和服务器端的长连接,双向实时通信。
特点:
事件驱动
异步
使用ws或者wss协议的客户端socket

能够实现真正意义上的推送功能

缺点:

少部分浏览器不支持,浏览器支持的程度与方式有区别。

下面进行代码和图解:

我现在使用idea进行创建一个项目,下面会给实例项目

简单介绍WebSocket客户端服务器端

WebSocket客户端

websocket允许通过JavaScript建立与远程服务器的连接,从而实现客户端与服务器间双向的通信。在websocket中有两个方法:  
    1、send() 向远程服务器发送数据
    2、close() 关闭该websocket链接
  websocket同时还定义了几个监听函数    
    1、onopen 当网络连接建立时触发该事件
    2、onerror 当网络发生错误时触发该事件
    3、onclose 当websocket被关闭时触发该事件
    4、onmessage 当websocket接收到服务器发来的消息的时触发的事件,也是通信中最重要的一个监听事件。msg.data
  websocket还定义了一个readyState属性,这个属性可以返回websocket所处的状态:
    1、CONNECTING(0) websocket正尝试与服务器建立连接
    2、OPEN(1) websocket与服务器已经建立连接
    3、CLOSING(2) websocket正在关闭与服务器的连接
    4、CLOSED(3) websocket已经关闭了与服务器的连接

  websocket的url开头是ws,如果需要ssl加密可以使用wss,当我们调用websocket的构造方法构建一个websocket对象(new WebSocket(url))的之后,就可以进行即时通信了。

我使用的是idea进行演示

简单的聊天

客户端代码如下:

<!DOCTYPE html>
<html>
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width" /><title>聊天室</title>
</head>
<style>body{text-align: center;}#div1{width:802px;height: 500px;border:1px solid red;margin: auto}#cs{width:650px;height: 350px;border:1px solid red;float: left;}#cs2{width: 148px;height: 350px;border: 1px solid red;float: left;}p{text-align: left}#ss{    height: 109px;width: 796px;}#cs,#cs2{OVERFLOW: auto;}#btnSend{float: right;width: 100px;height: 30px;}
</style>
<body>
<h2>小小聊天室</h2>
<input type="button" id="btnConnection" value="打开连接" />
<input type="button" id="btnClose" value="关闭连接" />
<div id="div1"><div id="cs" ></div><div id="cs2"></div><textarea id="ss"></textarea><br/> <input type="button" id="btnSend" value="发送" />
</div>
<script src="js/jquery.js" type="text/javascript" charset="utf-8"></script>
<script type="text/javascript">var socket;if(typeof(WebSocket) == "undefined") {console.log("您的浏览器不支持WebSocket");}$("#btnSend").attr("disabled","disabled");//禁用
    $("#btnClose").attr("disabled","disabled");//禁用var name;$("#btnConnection").click(function() {name= prompt("请输入发送的名称:");if(name!=null){$("#btnConnection").attr("disabled","disabled");//禁用//实现化WebSocket对象,指定要连接的服务器地址与端口//socket = new WebSocket("ws://169.254.105.218:8080/ws/"+name);//本机
            socket = new WebSocket("ws://localhost/ws/"+name);//打开事件
            socket.onopen = function() {$("#btnSend").attr("disabled","");//禁用
                $("#btnClose").attr("disabled","");//禁用
                $("#cs2").append($("<p/>").html(name+":连接成功"));};//获得消息事件
            socket.onmessage = function(msg) {$("#cs").append($("<p/>").html(msg.data));};//关闭事件
            socket.onclose = function() {$("#btnSend").attr("disabled","disabled");//禁用
                $("#btnConnection").attr("disabled","");//禁用
                $("#btnClose").attr("disabled","disabled");//禁用
                $("#cs2").append($("<p/>").html(name+":已关闭"));};//发生了错误事件
            socket.onerror = function() {$("#cs2").append($("<p/>").html("已关闭发生了错误"));}}});//发送消息
    $("#btnSend").click(function() {socket.send(document.getElementById("ss").value);$("#ss").val("");});//关闭
    $("#btnClose").click(function() {socket.close();});</script>
</body></html>

View Code

WebSocket服务器端

JSR356定义了WebSocket的规范,Tomcat7中实现了该标准。JSR356 的 WebSocket 规范使用 javax.websocket.*的 API,可以将一个普通 Java 对象(POJO)使用 @ServerEndpoint 注释作为 WebSocket 服务器的端点。

服务器代码如下:

package com;
import java.io.IOException;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;import javax.websocket.CloseReason;
import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.PathParam;
import javax.websocket.server.ServerEndpoint;@ServerEndpoint("/ws/{user}")
public class SServlet {private String currentUser;private static Set<Session> sessions = new HashSet<>();//连接打开时执行
    @OnOpenpublic void onOpen(@PathParam("user") String user, Session session) {currentUser = user;//System.out.println("Connected ... " + session.getId());
        sessions.add(session);System.out.println(user);}//收到消息时执行
    @OnMessagepublic String onMessage(String message, Session session) throws IOException {System.out.println(currentUser + ":" + message);//发送给所有人for (Session s : sessions) {if (s.isOpen()) {s.getBasicRemote().sendText(currentUser+"说:"+message);}}return null;}//连接关闭时执行
    @OnClosepublic void onClose(Session session, CloseReason closeReason) {System.out.println(String.format("Session %s closed because of %s", session.getId(), closeReason));}//连接错误时执行
    @OnErrorpublic void onError(Throwable t) {t.printStackTrace();}
}

View Code

需要引用websocket包:官网地址:https://mvnrepository.com/artifact/javax.websocket/javax.websocket-api

或者直接下载

项目实例和包地址:https://github.com/weibanggang/Message_push

高手教师详细(果哥):https://www.cnblogs.com/best/p/5695570.html

posted @ 2018-08-08 19:20 韦邦杠 阅读(...) 评论(...) 编辑 收藏

WebSocket消息推送(实现进行聊天)和WebSocket简介相关推荐

  1. 基于websocket的网页实时消息推送与在线聊天(上篇)

    文章目录 @[toc] 基于websocket的网页实时消息推送与在线聊天(上篇) "使用dwebsocket在django中实现websocket" websocket原理图 d ...

  2. WebSocket消息推送和聊天功能实现

    WebSocket消息推送 SpringBoot集成WebSocket实现消息推送和聊天Demo gradle引入依赖 测试用的Controller 两个测试页面 WebSocket的Endpoint ...

  3. SpringBoot2.x 整合websocket 消息推送,单独发送信息,群发信息

    根据公司需求在SpringBoot项目中集成站内信,于是,我做了一个SpringBoot2.x 整合websocket 消息推送,给指定用户发送信息和群发信息即点点对方式和广播方式2种模式. 文章目录 ...

  4. java socket 推送机制_Java中websocket消息推送的实现代码

    一.服务层 package com.demo.websocket; import java.io.IOException; import java.util.Iterator; import java ...

  5. node.js Websocket消息推送---GoEasy

    Goeasy, 它是一款第三方推送服务平台,使用它的API可以轻松搞定实时推送!个人感觉goeasy推送更稳定,推送速度快,代码简单易懂上手快 浏览器兼容性:GoEasy推送支持websocket 和 ...

  6. GO实现websocket消息推送

    在慕课网学习了GO实现websocket消息推送,这边记录一下 依赖包: go get github.com/gorilla/websocket 然后是一个connection包 package im ...

  7. Java版WebSocket消息推送系统搭建

    Java版WebSocket消息推送系统搭建 最近在做消息推送,网上查了一些资料,开始想的是用MQ来做,后面发现用WebSocket来做的话感觉应该要简单点,话不多说,准备撸代码. 后端核心代码 /* ...

  8. java/web/springboot项目使用WebSocket消息推送

    java/web/springboot项目使用WebSocket消息推送 最近项目中,有消息推送的广播和在线咨询的功能,以前也没搞过啊,有些小伙伴估计也是,那肯定要赶紧学习起来啊~ 不说废话,今天就告 ...

  9. EasyGBS国标平台新增WebSocket消息推送,可快速定位视频播放故障

    WebSocket是建立在TCP之上的一种双向通信协议,它能实现浏览器与服务器全双工通信,在性能上具有较强的优势.尤其是在海量并发及客户端与服务器交互负载流量大的情况下,WebSocket可以极大节省 ...

  10. 实现微信支付(Native支付),使用WebSocket进行推送 ——4.配置SpringBoot支持WebSocket,推送结果

    实现微信支付(Native支付),使用WebSocket进行推送 --4.配置SpringBoot支持WebSocket,推送结果 依赖 <dependency><groupId&g ...

最新文章

  1. boost库在工作(20)线程之五
  2. Linux 内核网络协议栈 ------sk_buff 结构体 以及 完全解释 (2.6.16)
  3. 大于2T硬盘通过UEFI启动+GPT分区表安装Server 2008 R2
  4. [转]Log4Net五步走
  5. 2020 ccf推荐中文期刊_中国计算机学会推荐中文期刊目录,让业内学者不再盲目投稿...
  6. window 和 linux 环境下杀死tomcat进程——也可以解决其他端口被占用的问题
  7. python redis模块常用_python redis 模块
  8. 成都青白江的羽毛球场地
  9. [转]Windows10 中文版 英文语言包安装失败解决
  10. codeforce 595A
  11. 前端常用PS技巧总结之将图片背景透明化
  12. 土地利用分类数据类型和下载
  13. MCE公司:DDR1 和 DDR2 双靶点抑制剂的设计合成及其抗炎作用研究
  14. 基于SEPIC拓扑的DC/DC升降压电路仿真
  15. 摄像头Optical Center检测算法简单实现
  16. 知到网课大学生心理健康教育考试试题|真题题库(含答案)
  17. Fedora的服务详解zz
  18. 一篇博客带你熟悉Eclipse、AndroidStudio下搭建NDK环境(内有Demo)
  19. FreeBSD10 安装
  20. Axure创建团队共享项目

热门文章

  1. 据说是学习python最全的资料
  2. python连点封闭多边形_python实现根据给定坐标点生成多边形mask的例子
  3. @Transactional注解属性(1)
  4. Cmax最优但∑Ci不一定最优 例子
  5. 以太坊 solidity 函数的完整声明格式
  6. VMware Ubuntu虚拟机卡顿慢 解决方法大全
  7. SpringMVC学习(三)RestFul风格
  8. android游戏boss坐标,混沌与秩序2已知boss刷新点分布图详解(已更新到20号boss)...
  9. mysql查看表注释和字段注释
  10. 遵守java编码规范