Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何使用WebSocket在play Framework2.5.x中创建多个用户

如何使用WebSocket在play Framework2.5.x中创建多个用户
EN

Stack Overflow用户
提问于 2016-12-25 03:20:38
回答 1查看 292关注 0票数 1

我跟踪了https://www.playframework.com/documentation/2.5.x/ScalaWebSockets的文档

我和演员写了一个聊天室:

代码语言:javascript
运行
AI代码解释
复制
def socket = WebSocket.acceptOrResult[String, String] { request =>
        ActorFlow.actorRef(out => MyWebSocketActor.props(out))
}
import akka.actor._
class MyWebSocketActor(out:ActorRef) extends Actor{
    def receive={
        case msg:String =>{
            out ! ("I received your message:"+msg)
            //println(msg)
        }
    }
}
object MyWebSocketActor{
    def props(out:ActorRef)=Props(new MyWebSocketActor(out))
}

但我在这里遇到了一个问题:当两个设备进入我的聊天室,他们只有他们的话。

如何使用Akka和Actor创建聊天室

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-12-26 03:31:58

你需要用演员来建模你的系统。MyWebSocketActor表示单个用户。你需要演员,这代表了与用户的空间。

我写了一个简单的例子(注释中的解释):

代码语言:javascript
运行
AI代码解释
复制
object MyWebSocketActor {
  case object Init
}

class MyWebSocketActor(out: ActorRef) extends Actor {

  //you can pass precreated room in constructor or receive it from message,
  //based on your logic
  val room: ActorRef = ???

  //when actor starts, it register self in room, we send Init 
  //message, because actors communications should be in `receive`
  override def preStart(): Unit = {
    self ! Init
  }

  //initial state, waiting joining in room 
  def waitingToJoin: Receive = {
    case Init => room ! Join(self)
    case Joined => context become joined
  }

  //joined state, process messages from out and room
  def joined: Receive = {
    case textFromOut: String => room ! Msg(textFromOut)
    case msg: Msg => out ! msg.toString
  }

  //initial state
  override def receive: Receive = waitingToJoin
}


object Room {
  //request to join
  case class Join(user: ActorRef)
  //join response
  case class Joined(room: ActorRef)
  case class Msg(text: String)
}

class Room extends Actor {

  //users in room
  val users: ListBuffer[ActorRef] = ListBuffer()

  override def receive: Receive = {
    case msg: Msg =>
      //send messages to all users
      users.foreach(u => u ! msg)
    //join request
    case Join(user) =>
      context watch user
      users += user
      user ! Joined(self)
    case Terminated(user) =>
      users -= user
  }

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41320692

复制
相关文章
在 JavaScript 中使用 WebSocket,创建 WebSocket 连接
在 JavaScript 中使用 WebSocket,用 WebSocket 对象创建 WebSocket 连接,并使用该对象提供的方法和事件处理程序进行实时通信。
王小婷
2023/09/23
2.3K0
你知道在springboot中如何使用WebSocket吗
  我们都知道 http 协议只能浏览器单方面向服务器发起请求获得响应,服务器不能主动向浏览器推送消息。想要实现浏览器的主动推送有两种主流实现方式:
用户2038589
2019/05/24
2.9K0
WebSocket在Spring Boot中的使用
“WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。”
小诸葛
2020/04/14
4.5K0
WebSocket在Spring Boot中的使用
如何在 Discourse 中配置使用 GitHub 登录和创建用户
本文章用于指导你如何在 Discourse 中配置使用 GitHub 的用户名进行登录。
HoneyMoose
2021/07/16
3.9K0
如何在 Discourse 中配置使用 GitHub 登录和创建用户
在React 中,如何创建refs?
在类组件中,可以使用 React.createRef() 方法来创建 ref 对象。通常,在组件的构造函数中将 ref 赋值给类的实例属性。
王小婷
2023/10/10
5440
如何在 wxPython 中创建多个工具栏
作为C++库wxWidgets的包装器,wxPython允许Python开发人员利用这个成熟且经过实战测试的框架的强大功能。它具有各种平台的本机外观和感觉,包括Windows,macOS和Linux。使用 wxPython,您可以使用各种小部件(例如按钮、文本控件,当然还有工具栏)设计具有视觉吸引力且响应迅速的桌面应用程序。
很酷的站长
2023/08/11
5040
如何在 wxPython 中创建多个工具栏
使用Go语言创建WebSocket服务
今天介绍如何用Go语言创建WebSocket服务,文章的前两部分简要介绍了WebSocket协议以及用Go标准库如何创建WebSocket服务。第三部分实践环节我们使用了gorilla/websocket库帮助我们快速构建WebSocket服务,它帮封装了使用Go标准库实现WebSocket服务相关的基础逻辑,让我们能从繁琐的底层代码中解脱出来,根据业务需求快速构建WebSocket服务。
KevinYan
2020/03/26
6.6K0
如何在Linux中创建文件?多个文件创建操作命令。
如果文件file1.txt不存在,则上面的命令将创建该文件,否则,它将更改其时间戳。
用户5005176
2021/08/10
40K0
如何使用 Vue 命名插槽创建多个模板插槽?
这是最基本的示例,如果我们不提供父级的任何slot 内容,则我们将<slot>放在其中的任何内容都会作为后备内容。
前端小智@大迁世界
2022/06/15
2.9K0
如何使用 Vue 命名插槽创建多个模板插槽?
在Jetty中使用websocket
在工作中,我们有时候需要使用能与前端实时通信传输以通信,这种技术就是由Socket实现的,而Socket又有短连接和长连接之分,长连接技术就是我们今天要介绍的websocket。
Titan框架
2018/09/25
2.3K0
在Jetty中使用websocket
在Fedora中如何授予权限给用户使用Docker
本文翻译自Daniel J Walsh的一篇开源文章:http://opensource.com/business/14/10/docker-user-rights-fedora
星哥玩云
2022/07/03
1.3K0
在 git 中如何配置用户信息
最近买了台新的笔记本,重新装了一些软件,这次就说说怎么在 git 中配置用户信息吧。
前端西瓜哥
2022/12/21
1.1K0
在Linux中如何禁止用户登录
默认情况下,创建用户时,将按照/etc/default/useradd文件中定义的为用户分配shell。
用户9104802
2021/11/22
6.8K0
使用 Jetpack Compose 提升 Play 商店的用户体验
作者 / Google Play 技术负责人 Andrew Flynn 和 Jon Boekenoogen
Android 开发者
2022/04/02
3.2K0
使用 Jetpack Compose 提升 Play 商店的用户体验
使用 rabbitmqctl 创建用户
[root@controller ~]# rabbitmqctl add_user wocaouser adminpasswd Creating user "wocaouser"
院长技术
2020/06/13
1.3K0
如何在 Linux 中创建非登录用户?
在 Linux 系统中,用户账户的管理是一个重要的任务。除了常规的登录用户,有时候我们需要创建一些非登录用户,这些用户通常用于运行服务、执行特定任务或限制访问权限。
网络技术联盟站
2023/05/26
2.8K0
如何在 Linux 中创建非登录用户?
使用websocket-sharp来创建c#版本的websocket服务
当前有一个需求,需要网页端调用扫描仪,javascript不具备调用能力,因此需要在机器上提供一个ws服务给前端网页调用扫描仪。而扫描仪有一个c#版本的API,因此需要寻找一个c#的websocket库。 java里有大名鼎鼎的netty,通过搜索,c#可以选择websocket-sharp来实现websocket Server。 使用websocket-sharp创建websocket server using System; using WebSocketSharp; using WebSocketSh
JadePeng
2018/03/12
3.8K0
【实战记录】WebSocket在vue2中的使用
官方说, WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。但是我对网络协议并不了解,用实际用途去解释它就是,它支持服务端主动给客户端发送消息。
一尾流莺
2022/12/10
3.4K0
springboot第3集:springboot中创建多个模块创建,关联,后续如何打包呢
在Spring Boot中,创建多个模块并关联它们的最佳实践是使用Maven或Gradle进行构建。以下是使用Maven先创建父pom.xml:
达达前端
2023/10/08
1.2K0
点击加载更多

相似问题

如何在play Framework2.5.x中减少webSocket数据流

13

使用play framework 2.6创建websocket

166

无法配置Ebean Play Framework2.5.x

12

如何从play Framework2.5.x构建jar

11

如何在Play的2.0 WebSocket中认证用户?

31
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档