Scala Akka TCP示例

1、基于控制台输入通信 (Akka2.6.4,Scala2.13.1)

package akka

import akka.actor.{Actor, ActorRef, ActorSelection, ActorSystem, Props}
import com.typesafe.config.{Config, ConfigFactory}

import scala.io.StdIn

/**
 * 服务器启动程序
 */
object NetworkServerActor {
    private val host: String = "127.0.0.1"
    private val port: Int = 9999 // 默认端口为2552
    // 2.5.30
    private val config: Config = ConfigFactory.parseString(
        s"""
           |akka.actor.provider="akka.remote.RemoteActorRefProvider"
           |akka.remote.netty.tcp.hostname=$host
           |akka.remote.netty.tcp.port=$port
           |akka.remote.netty.tcp.bind-hostname=$host
           |akka.remote.netty.tcp.bind-port=$port
           |akka.remote.log-received-messages=on
           |akka.remote.log-sent-messages=on
           |akka.remote.enabled-transports = ["akka.remote.netty.tcp"]
           |""".stripMargin)
    // 2.6.4
    private val newConfig: Config = ConfigFactory.parseString(
        s"""
        akka{
            actor{
                provider="akka.remote.RemoteActorRefProvider"
                allow-java-serialization=on
            }
            remote{
                enabled-transports=["akka.remote.netty.tcp"]
                artery{
                    transport=tcp
                    canonical.hostname=$host
                    canonical.port=$port
                }
            }
        }
       """)
    private val serverSystem: ActorSystem = ActorSystem.apply("hooSystemServer", newConfig)

    def main(args: Array[String]): Unit = {
        val serverActorRef: ActorRef = serverSystem.actorOf(Props[ServerActor], "serverActor")
        serverActorRef ! "start"
    }
}

/**
 * 客户端启动程序
 */
object NetworkClientActor {
    private val (host, port, serverHost, serverPort) = ("127.0.0.1", 9998, "127.0.0.1", 9999)
    private val config: Config = ConfigFactory.parseString(
        s"""
           |akka.actor.provider="akka.remote.RemoteActorRefProvider"
           |akka.remote.netty.tcp.hostname=$host
           |akka.remote.netty.tcp.port=$port
           |akka.remote.netty.tcp.bind-hostname=$host
           |akka.remote.netty.tcp.bind-port=$port
           |akka.remote.log-received-messages=on
           |akka.remote.log-sent-messages=on
           |akka.remote.enabled-transports = ["akka.remote.netty.tcp"]
           |""".stripMargin)
    private val newConfig: Config = ConfigFactory.parseString(
        s"""
        akka{
            actor{
                provider="akka.remote.RemoteActorRefProvider"
                allow-java-serialization=on
            }
            remote{
                enabled-transports=["akka.remote.netty.tcp"]
                artery{
                    transport=tcp
                    canonical.hostname=$host
                    c
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Akka是一个基于Actor模型的并发编程框架,它提供了一种简单而强大的方式来处理并发编程和分布式系统。WebSocket是一种在客户端和服务器之间进行双向通信的协议。而wss是WebSocket***可以通过akka-http模块来实现。akka-http提供了一套灵活的工具和API来处理HTTP和WebSocket请求。 要在Akka中使用WebSocket over SSL(wss),你需要做以下几步: 1. 配置SSL证书:你需要生成和配置一个SSL证书,可以使用自签名证书或者购买一个由可信机构签名的证书。 2. 导入依赖:确保你的项目中导入了akka-http和akka-stream依赖。 3. 创建WebSocket路由:使用akka-http的路由DSL创建一个WebSocket路由。你可以定义处理WebSocket消息的逻辑,比如收到消息时的处理和发送消息给客户端等。 4. 启动HTTP服务:创建一个HTTP服务器,并将WebSocket路由添加到路由器中。 下面是一个简单示例,演示了如何在Akka中使用WebSocket over SSL: ```scala import akka.actor.ActorSystem import akka.http.scaladsl.Http import akka.http.scaladsl.model.ws.{Message, TextMessage} import akka.http.scaladsl.server.Directives._ import akka.stream.ActorMaterializer import akka.stream.scaladsl.{Flow, Sink, Source} import scala.concurrent.ExecutionContext.Implicits.global object WebSocketServer { def main(args: Array[String]): Unit = { implicit val system = ActorSystem("websocket-system") implicit val materializer = ActorMaterializer() val route =

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值