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

<title>webscoket test</title>

<script type="text/javascript">
var ws = new WebSocket("ws://127.0.0.1:80/websk/wsServlet?uname=${uname}");
ws.onopen = function() {
};
ws.onmessage = function(message) {
document.getElementById("chatlog").textContent += message.data + "\n";
};
function postToServer() {
ws.send(document.getElementById("msg").value);
document.getElementById("msg").value = "";
};
function closeConnect(){
ws.close();
};
</script>
</head>

<body>
欢迎您:${uname}!<br>
<textarea id="chatlog" readonly rows="10" cols="50"></textarea>
<br />
<input id="msg" type="text" />
<button type="submit" id="sendButton" onClick="postToServer()">
Send!
</button>
<button type="submit" id="sendButton" onClick="closeConnect()">
End
</button>
</body>
</html>

public class WebSocket extends WebSocketServlet
{
private static final long serialVersionUID = -4853540828121130946L;

private static ArrayList<MyMessageInbound> mmiList = new ArrayList<MyMessageInbound>();

protected StreamInbound createWebSocketInbound(String arg0 , HttpServletRequest arg1)
{
String name = arg1.getParameter("uname");
return new MyMessageInbound(name);
}

private class MyMessageInbound extends MessageInbound
{
private String uname;

public MyMessageInbound(){}

public MyMessageInbound(String uname)
{
this.uname = uname;
}
private WsOutbound myoutbound;

@Override
public void onOpen(WsOutbound outbound)
{
try
{
System.out.println("Open Client.");
this.myoutbound = outbound;
mmiList.add(this);
outbound.writeTextMessage(CharBuffer.wrap("系统消息: " + uname+ ", 欢迎进入html5聊天室!"));
}
catch (IOException e)
{
e.printStackTrace();
}
}

@Override
public void onClose(int status)
{
System.out.println("Close Client.");
mmiList.remove(this);
}

@Override
public void onTextMessage(CharBuffer cb) throws IOException
{
System.out.println("Accept Message : " + cb);
for (MyMessageInbound mmib : mmiList)
{
CharBuffer buffer = CharBuffer.wrap(uname + ":" + cb);
mmib.myoutbound.writeTextMessage(buffer);
mmib.myoutbound.flush();
}
}

@Override
public void onBinaryMessage(ByteBuffer bb) throws IOException
{
}

@Override
public int getReadTimeout()
{
// 设置websocket的超时时间,单位秒
return 60000;
}
}
}

demo链接如下:

http://files.cnblogs.com/xiexy/websk.rar

websocket 实现聊天功能的更多相关文章

  1. spring boot集成websocket实现聊天功能和监控功能

    本文参考了这位兄台的文章: https://blog.csdn.net/ffj0721/article/details/82630134 项目源码url: https://github.com/zhz ...

  2. 基于vs2015 SignalR开发的微信小程序使用websocket实现聊天功能

    一)前言 在微信小程上实现聊天功能,大致有三种方式:1)小程序云开发 2)购买第三方IM服务 3)使用自己的服务器自己开发. 这里重要讲使用自己的服务器自己开发,并且是基于vs的开发. 网上提供的解决 ...

  3. 在Spring Boot框架下使用WebSocket实现聊天功能

    上一篇博客我们介绍了在Spring Boot框架下使用WebSocket实现消息推送,消息推送是一对多,服务器发消息发送给所有的浏览器,这次我们来看看如何使用WebSocket实现消息的一对一发送,模 ...

  4. 基于java 的websocket的聊天功能,一开始初始化websocket,执行打开连接之后就直接关闭连接了。

    1 错误描述: java 后台没有报错,但是就是连接不上,一连上又自动关闭. 2 错误根源: 缺少jar包. 对比了报错的tomcat 的jar包和不报错的jar包 发现是tomcat下缺少上图绿色框 ...

  5. Netty 实现 WebSocket 聊天功能

    上一次我们用Netty快速实现了一个 Java 聊天程序(见http://www.waylau.com/netty-chat/).现在,我们要做下修改,加入 WebSocket 的支持,使它可以在浏览 ...

  6. Spring 学习——基于Spring WebSocket 和STOMP实现简单的聊天功能

    本篇主要讲解如何使用Spring websocket 和STOMP搭建一个简单的聊天功能项目,里面使用到的技术,如websocket和STOMP等会简单介绍,不会太深,如果对相关介绍不是很了解的,请自 ...

  7. 使用websocket实现在线聊天功能

    很早以前为了快速达到效果,使用轮询实现了在线聊天功能,后来无意接触了socket,关于socket我的理解是进程间通信,首先要有服务器跟客户端,服务的启动监听某ip端口定位该进程,客户端开启socke ...

  8. WebSocket(3)---实现一对一聊天功能

    实现一对一聊天功能 功能介绍:实现A和B单独聊天功能,即A发消息给B只能B接收,同样B向A发消息只能A接收. 本篇博客是在上一遍基础上搭建,上一篇博客地址:[WebSocket]---实现游戏公告功能 ...

  9. Spring Websocket实现简易在线聊天功能

    针对Spring Websocket的实现,我参照了其他博主的文章https://www.cnblogs.com/leechenxiang/p/5306372.html 下面直接给出实现: 一.引入相 ...

随机推荐

  1. bzoj1003 物流运输

    Description 物流公司要把一批货物从码头A运到码头B.由于货物量比较大,需要n天才能运完.货物运输过程中一般要转停好几个码头.物流公司通常会设计一条固定的运输路线,以便对整个运输过程实施严格 ...

  2. PHP保留2位小数 格式化小数、浮点数

    JS保留两位小数例子 四舍五入使用函数 toFixed() <html> <head> </head> <script language="java ...

  3. 【PHP发展史】PHP5.2 到 PHP5.6 中新增的功能详解

    截至目前(2014.2), PHP 的最新稳定版本是 PHP5.5, 但有差不多一半的用户仍在使用已经不在维护的 PHP5.2, 其余的一半用户在使用 PHP5.3. 因为 PHP 那“集百家之长”的 ...

  4. Mac Pro 软件安装/个性化配置 汇总

    苹果产品维修 一.Spotlight 搜索程序和文档 Spotlight是最最常用的东西, 类似Windows开始菜单中的搜索.  可以用来搜索文档,也可以搜索本机的程序, 这样可以快速启动. 点击右 ...

  5. 在OSX和Windows版本Docker上运行GUI程序

    看到很多人在Docker问题区讨论:如何在OS X和Windows的Docker上运行GUI程序, 随手记录几个参考资料: https://github.com/docker/docker/issue ...

  6. javascript数据结构-栈

    github博客地址 栈(stack)又名堆栈,它是一种运算受限的线性表.遵循后进先出原则,像垃圾桶似的.功能实现依然按照增删改查来进行,内部数据存储可以借用语言原生支持的数组. 栈类 functio ...

  7. SpringMVC Controller介绍

    SpringMVC Controller 介绍 一.简介 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理 ...

  8. 打造smali代码库辅助分析

    打造smali代码库辅助分析 在分析Android应用程序的时候,我们往往会插入代码重打包apk来辅助我们分析的工作 一个比较取巧的方法就是先用java写好代码以及相关的调用之后, 然后直接扣出代码 ...

  9. 在虚拟机下安装hadoop集成环境(centos7+hadoop-2.6.4+jdk-7u79)

    [1]64为win7系统,用virtualbox建立linux虚拟机时,为什么没有64位的选项? 百度 [2]在virtualbox上安装centos7 [3]VirtualBox虚拟机网络环境解析和 ...

  10. web应用 http 响应 url uri

    动态web  应用结构 WEB-INF --classes --lib web.xml     响应:   url   uri