Java后端实现websocket与微信小程序端连接简单例子http://www.bieryun.com/963.html

直接附代码
前端代码:<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>

<%

String path = request.getContextPath();

String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";

%>

<!DOCTYPE HTML>

<html>

<head>

<base href="<%=basePath%>">

<title>My WebSocket</title>

</head>

<body>

Welcome<br/>

<input id="text" type="text" /><button οnclick="send()">Send</button>    <button οnclick="closeWebSocket()">Close</button>

<div id="message">

</div>

</body>

<script type="text/javascript">

var websocket = null;

//判断当前浏览器是否支持WebSocket

if('WebSocket' in window){

websocket = new WebSocket("ws://localhost:8080/myWebSocket/websocket");

}

else{

alert('Not support websocket')

}

//连接发生错误的回调方法

websocket.onerror = function(){

setMessageInnerHTML("error");

};

//连接成功建立的回调方法

websocket.onopen = function(event){

setMessageInnerHTML("open");

}

//接收到消息的回调方法

websocket.onmessage = function(event){

setMessageInnerHTML(event.data);

}

//连接关闭的回调方法

websocket.onclose = function(){

setMessageInnerHTML("close");

}

//监听窗口关闭事件,当窗口关闭时,主动去关闭websocket连接,防止连接还没断开就关闭窗口,server端会抛异常。

window.onbeforeunload = function(){

websocket.close();

}

//将消息显示在网页上

function setMessageInnerHTML(innerHTML){

document.getElementById('message').innerHTML += innerHTML + '<br/>';

}

//关闭连接

function closeWebSocket(){

websocket.close();

}

//发送消息

function send(){

var message = document.getElementById('text').value;

websocket.send(message);

}

</script>

</html>

后端代码:

import java.io.IOException;

import java.util.concurrent.CopyOnWriteArraySet;

import javax.websocket.OnClose;

import javax.websocket.OnError;

import javax.websocket.OnMessage;

import javax.websocket.OnOpen;

import javax.websocket.Session;

import javax.websocket.server.ServerEndpoint;

//该注解用来指定一个URI,客户端可以通过这个URI来连接到WebSocket。类似Servlet的注解mapping。无需在web.xml中配置。

@ServerEndpoint("/websocket")

public class MyWebSocket {

//静态变量,用来记录当前在线连接数。应该把它设计成线程安全的。

private static int onlineCount = 0;

//concurrent包的线程安全Set,用来存放每个客户端对应的MyWebSocket对象。若要实现服务端与单一客户端通信的话,可以使用Map来存放,其中Key可以为用户标识

private static CopyOnWriteArraySet<MyWebSocket> webSocketSet = new CopyOnWriteArraySet<MyWebSocket>();

//与某个客户端的连接会话,需要通过它来给客户端发送数据

private Session session;

/**

* 连接建立成功调用的方法

* @param session  可选的参数。session为与某个客户端的连接会话,需要通过它来给客户端发送数据

*/

@OnOpen

public void onOpen(Session session){

this.session = session;

webSocketSet.add(this);     //加入set中

addOnlineCount();           //在线数加1

System.out.println("有新连接加入!当前在线人数为" + getOnlineCount());

}

/**

* 连接关闭调用的方法

*/

@OnClose

public void onClose(){

webSocketSet.remove(this);  //从set中删除

subOnlineCount();           //在线数减1

System.out.println("有一连接关闭!当前在线人数为" + getOnlineCount());

}

/**

* 收到客户端消息后调用的方法

* @param message 客户端发送过来的消息

* @param session 可选的参数

*/

@OnMessage

public void onMessage(String message, Session session) {

System.out.println("来自客户端的消息:" + message);

//群发消息

for(MyWebSocket item: webSocketSet){

try {

item.sendMessage(message);

} catch (IOException e) {

e.printStackTrace();

continue;

}

}

}

/**

* 发生错误时调用

* @param session

* @param error

*/

@OnError

public void onError(Session session, Throwable error){

System.out.println("发生错误");

error.printStackTrace();

}

/**

* 这个方法与上面几个方法不一样。没有用注解,是根据自己需要添加的方法。

* @param message

* @throws IOException

*/

public void sendMessage(String message) throws IOException{

this.session.getBasicRemote().sendText(message);

//this.session.getAsyncRemote().sendText(message);

}

public static synchronized int getOnlineCount() {

return onlineCount;

}

public static synchronized void addOnlineCount() {

MyWebSocket.onlineCount++;

}

public static synchronized void subOnlineCount() {

MyWebSocket.onlineCount--;

}

}

以上是网上的前端及后端的代码(原文地址:http://www.cnblogs.com/xdp-gacl/p/5193279.html?utm_source=tuicool&utm_medium=referral),jdk版本要求是在jdk1.7.0以上,tomcat版本也需要在tomcat7.0版本以上。另外有个需要注意的点就是websocket的api包要用tomcat自带的(websocket-api.jar),一开始本人采用的是非tomcat自带的javax.websocket-api-1.0.jar包,在配置了正确的环境之后总是连接不上,会报错:Error during WebSocket handshake: Unexpected response code: 404。

正确的效果图如下:

进入页面http://localhost:8080/myWebSocket/index.jsp

输入内容,点击send

微信小程序端发起请求:

请求代码:

connectWebSocket:function(){
console.log("创建webSocket连接");
wx.connectSocket({
url:'ws://localhost:8080/myWebSocket/websocket',
// url:'http://eservicesit.prlife.com.cn:7001',
data:{
x: '',
y: ''
},
header:{
'content-type': 'application/json'
},
method:"GET",
success: function(res){
console.log("创建连接成功");
//do something
},
fail:function(res){
console.log("创建连接失败,原因因::"+res.errMsg);
},
complete:function(){
console.log("创建连接complete");
}
})

}控制台输出:

Java后端实现websocket与微信小程序端连接简单例子相关推荐

  1. java+SpringBoot+HTML+Mysq基于微信小程序的掌上博物馆游览

    详细功能设计:请点击下面链接查看 java+SpringBoot+HTML+Mysq基于微信小程序的掌上博物馆游览_哔哩哔哩_bilibili 源码+论文获取: 源码+论文获取请私信获取 摘  要 本 ...

  2. 基于java springboot的小说阅读微信小程序含后台管理系统源码

    系统运行环境 开发工具 eclipse(idea),mysql5.7(大于5.5),navicat,小程序开发工具 硬件要求 windows操作系统 cpu:2.4GHz 内存:4G 硬盘:100G ...

  3. java计算机毕业设计基于安卓/微信小程序的大学生心理测试咨询管理系统app

    项目介绍 随着社会经济的发展,医疗卫生事业取得了巨大进步,在健康中心理健康占据越来越重要的地位,什么是心理健康:心理健康,从广义上讲,是指一种高效而满意的.持续的心理状态.从狭义上讲,心理健康是指人的 ...

  4. 微信小程序获取用户手机号码,Java后台servlet解密(微信小程序调用微信支付也是大致的流程)

    本篇记录说明 微信小程序获取用户手机号码,Java后台servlet解密(微信小程序调用微信支付也是大致的流程,详细内容可私信交流) (第一次写博客,写得不好的地方见谅,面向新手,大佬请无视,不喜勿喷 ...

  5. 【微信小程序系列】微信小程序超简单教程,基本语法,获取用户基本数据信息,实现对云数据库的增删改查及小程序外部api的引用示例(附源码)

    [微信小程序系列]微信小程序超简单教程 小程序项目结构 静态页面的构成 HTML:结构 css:样式 js:行为 小程序 页面全部存放在pages, 而且pages目录只能存放页面 页面包括4个文件, ...

  6. 微信小程序最简单的轮播图

    小程序轮播图 今天给大家分享一个在微信开发者工具开发微信小程序的简单案例--轮播图(只用wxml和wxss) 话不多说,直接上代码!!! 效果图 WXML代码 基本属性介绍 <!-- indic ...

  7. 微信小程序:简单舒服新UI装逼制作神器

    这是一款装逼神器小程序源码 内包含了N种模板制作,另外并有大分类 另外小编还给添加了几个流量主广告,包含了每一个页面都覆盖了 而且流量主还不是单一种: Banner 激励视频 视频广告 多格子广告 横 ...

  8. 微信小程序canvas简单使用

    微信小程序canvas简单使用 index.wxml文件 index.js文件 效果图 index.wxml文件 <canvas type="2d" id="can ...

  9. 微信小程序实现简单定位功能

    微信小程序实现简单定位功能,简单易读,获取经纬度信息 在pages下创建一个单页如local local.js如下 var app = getApp() Page({ data:{latitude:' ...

  10. 微信小程序制作简单的商品列表页,实现价格求和

    微信小程序制作简单的商品列表页,实现价格求和 准备工作 1.node.js 2.微信开发者工具 目录结构 客户端代码实现 index.wxml <view class="contain ...

最新文章

  1. mysql命令使用2
  2. 【专访】PP租车创业故事二:为什么要创业?
  3. 什么是透传通道?(透明传输通道,就是当中继使)
  4. 配置ADO.NET类文件连接优化
  5. timestamp 字段
  6. Windows OS上安装运行Apache Kafka教程
  7. PHP仿金蝶云ERP进销存V8网络多仓版源码
  8. 运用大数据助力大发展
  9. sqoop从hdfs上导出数据到MySQL报错:ClassNotFoundException:allclo
  10. 【探路者】第三周立会报告5(总第17次)
  11. mysql数据库增删改操作不自动提交事务
  12. Ubuntu更新Chrome到最新的版本
  13. 阿里巴巴国际站新店铺3个月的成果
  14. navicat for mysql 10.1.7下载破解(2017.12.30)
  15. 充电桩市场与发展前景分析
  16. 刀剑乱舞极化图片_【刀剑乱舞】极化刀速查攻略
  17. 认识信道(零):天线的极化
  18. 机器学习线性回归实践,广告投放收益预测,手写梯度下降
  19. c语言扇形打印图片,怎么做扇形图表?
  20. html+css 基础知识大总结

热门文章

  1. node-red 可视化_可视化和注意-第4部分
  2. 强化学习推荐系统_推荐人系统:价值调整,强化学习和道德规范
  3. python向mysql插入数据
  4. python中不包不包括_Python文件部分(不包括数据)
  5. 计算机网络—五层知识架构图
  6. ad敷铜后还有部分飞线_眼花缭乱!超级无敌的飞线大法,打造一把超低功耗无线机械键盘...
  7. android studio线性渐变,使用Kotlin实现文字渐变TextView的代码
  8. 基于 EntityFramework、Autofac 的 UnitOfWork 框架(一)
  9. Sharding-jdbc视频:当Sharding-jdbc遇到Spring Boot
  10. 【零基础入门】 css学习笔记(5) 浮动