WebSocket的主动推送

关于消息推送,现在的解决方案如轮询、长连接或者短连接,当然还有其他的一些技术框架,有的是客户端直接去服务端拿数据。

其实推送推送主要讲的是一个推的概念,WebSocket是一种主动推送消息的技术。

基于Java的WebSocket

这里主要是结合网上的例子实现下。

简单的客户端JavaScript

<!DOCTYPE html>
<html>
<head>
<title>Testing websockets</title>
</head>
<body>
<div>
<input type="submit" value="Start" onclick="start()" />
</div>
<div id="messages"></div>
<script type="text/javascript">
var webSocket =
new WebSocket('ws://localhost:8080/wesocket/websocketTest');
webSocket.onerror = function(event) {
onError(event)
}; webSocket.onopen = function(event) {
onOpen(event)
}; webSocket.onmessage = function(event) {
onMessage(event)
}; function onMessage(event) {
document.getElementById('messages').innerHTML
+= '<br />' + event.data;
} function onOpen(event) {
document.getElementById('messages').innerHTML
= 'Connection established';
} function onError(event) {
alert(event.data);
} function start() {
webSocket.send('hello');
return false;
}
</script>
</body>
</html>

服务端

package com.tony.websocket;

import javax.websocket.OnClose;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.Session;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException; @ServerEndpoint("/websocketTest")
public class WebSocketTest {
@OnMessage
public void onMessage(String message, Session session) throws IOException, InterruptedException { // Print the client message for testing purposes
System.out.println("Received: " + message); // Send the first message to the client
session.getBasicRemote().sendText("This is the first server message"); // Send 3 messages to the client every 5 seconds
int sentMessages = 0;
while (sentMessages < 3) {
Thread.sleep(5000);
session.getBasicRemote().sendText("This is an intermediate server message. Count: " + sentMessages);
sentMessages++;
} // Send a final message to the client
session.getBasicRemote().sendText("This is the last server message");
} @OnOpen
public void onOpen() {
System.out.println("Client connected");
} @OnClose
public void onClose() {
System.out.println("Connection closed");
}
}

pom.xml 文件

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tony</groupId>
<artifactId>wesocket</artifactId>
<version>0.0.1-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>javax.websocket</groupId>
<artifactId>javax.websocket-api</artifactId>
<version>1.0-rc5</version>
<scope>provided</scope>
</dependency>
</dependencies>
</project>

我这里用的是JDK是 jdk1.8.0_60 ,Tomcat用的是 apache-tomcat-7.0.64

1、建立连接



2、发送消息



3、服务端推送消息

基于Java的WebSocket推送的更多相关文章

  1. 基于Java的WebSocket推送【转载】

    http://www.cnblogs.com/tonyY/p/5495417.html

  2. Golang websocket推送

    Golang websocket推送 在工作用主要使用的是Java,也做过IM(后端用的netty websocket).最近想通过Golang重写下,于是通过websocket撸了一个聊天室. 项目 ...

  3. 基于Web的数据推送技术(转)

    基于Web的数据推送技术 对于实时性数据显示要求比较高的系统,比如竞价,股票行情,实时聊天等,我们的解决方案有以下几种.1. HTTP请求发送模式,一般可以基于ajax的请求,比如每3秒一次访问下服务 ...

  4. Android 基于Netty的消息推送方案之Hello World(一)

    消息推送方案(轮询.长连接) 轮询 轮询:比较简单的,最容易理解和实现的就是客户端去服务器上拉信息,信息的及时性要求越高则拉信息的频率越高.客户端拉信息的触发可以是一些事件,也可以是一个定时器,不断地 ...

  5. 用 Go 编写一个简单的 WebSocket 推送服务

    用 Go 编写一个简单的 WebSocket 推送服务 本文中代码可以在 github.com/alfred-zhong/wserver 获取. 背景 最近拿到需求要在网页上展示报警信息.以往报警信息 ...

  6. 基于SignalR的消息推送与二维码描登录实现

    1 概要说明 使用微信扫描登录相信大家都不会陌生吧,二维码与手机结合产生了不同应用场景,基于二维码的应用更是比较广泛.为了满足ios.android客户端与web短信平台的结合,特开发了基于Singl ...

  7. Android 基于Netty的消息推送方案之对象的传递(四)

    在上一篇文章中<Android 基于Netty的消息推送方案之字符串的接收和发送(三)>我们介绍了Netty的字符串传递,我们知道了Netty的消息传递都是基于流,通过ChannelBuf ...

  8. Android 基于Netty的消息推送方案之字符串的接收和发送(三)

    在上一篇文章中<Android 基于Netty的消息推送方案之概念和工作原理(二)> ,我们介绍过一些关于Netty的概念和工作原理的内容,今天我们先来介绍一个叫做ChannelBuffe ...

  9. Android 基于Netty的消息推送方案之概念和工作原理(二)

    上一篇文章中我讲述了关于消息推送的方案以及一个基于Netty实现的一个简单的Hello World,为了更好的理解Hello World中的代码,今天我来讲解一下关于Netty中一些概念和工作原理的内 ...

随机推荐

  1. 记node前后端代码共用的一次坑

    项目背景 nodejs项目,webpack打包,用axios请求,Promise封装,nunjucks模板引擎: 之前已将nunjucks模板通过webpack打包策略,做成前后端共用: 目前需要将网 ...

  2. Uva10129 - Play on Words 欧拉通路 DFS

    题目链接: http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=105& ...

  3. 最简Java程序

    本文是笔者创建项目--一系列java示例程序的总结.项目位置在SimplestJavaDemos,欢迎访问. 以下为正文: ---   作为一个伪完美主义+拖延癌患者,每次要学习新技术的时候,总是要把 ...

  4. salesforce零基础学习(八十一)更改标准字段的label名称(Admin)

    我们在开发中往往需要考虑国际化功能,salesforce 提供了国际化功能,在search部分搜索translate,便可以找到translate部分,从而对需要的进行translate.比如pick ...

  5. scss 初学笔记 三 继承

    //继承 .btn{ padding: 4px 10px; font-size: 14px; } .primary{ background:red; @extend .btn; } //%placeh ...

  6. junit4X系列--Rule

    原文出处:http://www.blogjava.net/DLevin/archive/2012/05/12/377955.html.感谢作者的无私分享. 初次用文字的方式记录读源码的过程,不知道怎么 ...

  7. 数据访问(DAO)

    那些年,到处刮起了业务处理分层的大风,无论何时何地,都有某MVC框架.Spring管理的Service.以及iBatis和Hibernate等代表的DAO,SSH.SSI等成了标准.然而,我们仔细研究 ...

  8. DRBD的主备安装配置

    drbd软件包链接:https://pan.baidu.com/s/1eUcXVyU 密码:00ul 1.使用的资源:1.1 系统centos6.9 mini1.2 两台节点主机node1.node2 ...

  9. Python算法——二叉树

    一.二叉树 from collections import deque class BiTreeNode: def __init__(self, data): self.data = data sel ...

  10. 我是这么配置mariadb的。 为了能够操作汉字数据~

    为了能够操作汉字数据- 以下是步骤: 1. 找到my.cnf /etc/my.cnf 2. 打开它,在[client]和[mysql]下输入以下指令 default-character-set=utf ...