本文转载自:http://www.jianshu.com/p/8500ad65eb50

WebSocket前端准备

前端我们需要用到两个js文件:
sockjs.jsstomp.js

  • SockJS
    SockJS 是一个浏览器上运行的 JavaScript 库,如果浏览器不支持 WebSocket,该库可以模拟对 WebSocket 的支持,实现浏览器和 Web 服务器之间低延迟、全双工、跨域的通讯通道。
  • Stomp
    Stomp 提供了客户端和代理之间进行广泛消息传输的框架。Stomp 是一个非常简单而且易用的通讯协议实现,尽管代理端的编写可能非常复杂,但是编写一个 Stomp 客户端却是很简单的事情,另外你可以使用 Telnet 来与你的 Stomp 代理进行交互。

发送公告功能

html代码

<div>
<div>
<button id="connect" onclick="connect();">Connect</button>
<button id="disconnect" disabled="disabled" onclick="disconnect();">Disconnect</button>
</div>
<div id="conversationDiv">
<p>
<label>notice content?</label>
</p>
<p>
<textarea id="name" rows="5"></textarea>
</p>
<button id="sendName" onclick="sendName();">Send</button>
<p id="response"></p>
</div>
</div>

javascript代码

<script src="/js/sockjs-0.3.4.min.js"></script>
<script src="/js/stomp.min.js"></script>
<script>
var stompClient = null;
function setConnected(connected) {
document.getElementById('connect').disabled = connected;
document.getElementById('disconnect').disabled = !connected;
document.getElementById('conversationDiv').style.visibility = connected ? 'visible' : 'hidden';
document.getElementById('response').innerHTML = '';
}
// 开启socket连接
function connect() {
var socket = new SockJS('/socket');
stompClient = Stomp.over(socket);
stompClient.connect({}, function (frame) {
setConnected(true);
});
}
// 断开socket连接
function disconnect() {
if (stompClient != null) {
stompClient.disconnect();
}
setConnected(false);
console.log("Disconnected");
}
// 向‘/app/change-notice’服务端发送消息
function sendName() {
var value = document.getElementById('name').value;
stompClient.send("/app/change-notice", {}, value);
}
connect();
</script>

相关说明:
关于JavaScript实现WebSocket的功能很简单,基本分以下几步:

开启Socket

  1. var socket = new SockJS('/socket'); 先构建一个SockJS对象
  2. stompClient = Stomp.over(socket); 用Stomp将SockJS进行协议封装
  3. stompClient.connect() 与服务端进行连接,同时有一个回调函数,处理连接成功后的操作信息。

发送消息

stompClient.send("/app/change-notice", {}, value);

页面预览:

Paste_Image.png

修改公告功能

当我们发送公告后,将上图的公告信息在不刷新页面的情况下,使用WebSocket将其改变。发送公告的前端代码已经完成,现在我们来写另一个客户端,用来接收第一个页面发送的公告,展示在上图红框中。
功能比较简单,所以下面只给出部分js代码:

var noticeSocket = function () {
var s = new SockJS('/socket');
var stompClient = Stomp.over(s);
stompClient.connect({}, function () {
console.log('notice socket connected!');
stompClient.subscribe('/topic/notice', function (data) {
$('.message span.content').html(data.body);
});
});
};

相关说明:
这里与发送公告代码不同的是,在stompClient建立连接成功之后,我们要监听服务端发送过来的信息,接收到之后,改变页面上公告的内容,所以用到了stompClient.subscribe()
这个subscribe()方法功能就是定义一个订阅地址,用来接收服务端的信息(在服务端代码中,我们在@SendTo中指定了这个订阅地址“/topic/notice”),当收到消息后,在回调函数中处理业务逻辑。

至此,所有的功能开发完毕!

效果演示

首先我们发布一条公告:

然后我们切到另一个页面,发现内容已变:

最新文章

  1. 在jasp页面循环显示
  2. Attribute
  3. No configuration found for the specified action解决办法
  4. Android webview实现上传图片的效果(图片压缩)
  5. JavaScript的事件对象_其他属性和方法
  6. [转]C:int型指针
  7. 为Windows 7添加“Internet打印”功能
  8. Nginx+PHP-FPM的域Socket配置方法
  9. node,npm,vue的全局升级
  10. tensorflow 源码编译
  11. 《响应式Web设计实践》学习笔记
  12. shell 在手分析服务器日志【转】
  13. 如何查看.Net Framework版本
  14. RabbitMQ(二):Java 操作队列
  15. CentOS+Uwsgi+Nginx发布Flask开发的WebAPI
  16. (zhuan) Using convolutional neural nets to detect facial keypoints tutorial
  17. Direct3D中 SetTextureStageState 函数
  18. python开发_json_一种轻量级的数据交换格式
  19. 《剑指offer》---两个栈实现队列
  20. Django视图之ORM更改数据库连接——配置MySQL库

热门文章

  1. wifi驱动移植
  2. FineReport——自定义控件实现填报提交事件和校验
  3. 【mongo】用户添加、导入数据库、连接VUE
  4. [].forEach.call($$(&quot;*&quot;),function(a){ a.style.outline=&quot;1px solid #&quot;+(~~(Math.random()*(1&lt;&lt;24))).toString(16) })
  5. 【转载】开发者眼中的Spring与Java EE
  6. memcached安装+绑定访问ip
  7. 自己编译生成k8s的rpm包
  8. 封装CSS动画
  9. LeetCode 461 汉明距离/LintCode 365 统计二进制中1的个数
  10. ubuntu右上角红色三角警告