Spring4.0 WebSocket怎么向指定用户发送信息?

qt1200 2015-06-26 10:27:11
我用springmvc框架做的一个前端程序

主要是用于聊天


spring4.0里面提供了一个注解@ServerEndpoint 可以把当前类变成websocket服务类

里面有@OnOpen是建立连接的时候执行方法

@OnMessage接收用户的信息并返回信息到客户端

@OnClose关闭连接后执行方法

@OnError出现错误执行方法,等等...

现在我遇到一个问题,在网上没找到资料:
1。怎么向指定用户发送信息?
我现在用的是:
@OnMessage
public void onMessage(String message, Session session) {
try {
session.getBasicRemote().sendText(json.toString());
} catch (Exception e) {
System.out.println("ERROR!");
}
}

很明显这是广播。但是我不知道怎么指定用户发送。网上找到的全部都是servlet的

2。因为是SPRINGMVC框架 在里面可以直接用注解调用服务层的类

@Resource
private UserService userService;

我定义了一个USER服务类

然后在在WEBsocket打开连接的方法里面写上查询

@OnOpen
public void onOpen(Session session) {

userService.findCount(userId);

}

发现服务报错!WEBSOCKET无法建立连接。怎么办?

3。在WEBSOCKET类中怎么获取session,是HttpServletRequest 然后request.getSession()因为我要对用户登录的时候那存入的session进行处理 发现WEBSOCKET类中无法获取或者传递过去

以上3个问题希望有哪位好心的大神帮我解决一下!
我的QQ 130100682
谢谢,谢谢,谢谢。。。
...全文
1168 4 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
1.服务端给客户端发消息是通过session来完成的,想要指定用户发送消息就得拿到对方用户的session,用它来发送消息。 session.getBasicRemote().sendText(json.toString()); 其实就是给指定用户发消息,这里的session就是该用户的session。 3.websocket中的session和HttpServletRequest中的session是不一样的,你肯定拿不到。websocket中也是可以拿到http的session的,怎么拿,度娘一大堆
「已注销」 2016-01-14
  • 打赏
  • 举报
回复
问题1 目前我也还在研究中 问题2 我发现通过直接注入的方式是失败的 即使我在类上加入@compotent注解也没有,注入的service为空,于是我采用了从spring的全局容器中取出的方法

private ChatLogService chatLogService;
public Chat() {
		WebApplicationContext context = ContextLoader.getCurrentWebApplicationContext();
		this.chatLogService = (ChatLogService) context.getBean("chatLogService");
	}
实测这样可以成功获取到业务类的对象,然而想获取http协议中的对象是无法通过参数直接传入的,传入的值为null...也许这是因为websocket和http协议的不同,这个我也不是很懂了. 问题3 可以采取另一种方式获取session中的数据,你在前台的js中可以将session中数据通过onmessage方法进行封装从而传到后台,这样就可以不必获取http中的session对象来处理数据了
卡帕kalper 2015-12-09
  • 打赏
  • 举报
回复
敢问楼主问题解决了吗

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧