PS:AKKA
之前要实现并发编程,通常要借用netty框架,现在如果又要高并发又要分布式就使用akka框架
这个akka在客户端和服务端每一端都相当于一个actor,尤其是服务端需要一个总管进行管理 PS: RPC
不同进程之间的的方法调用

-----------------------------实现项目

1.创建Maven项目

PS:通常编译好的话,使用插件的package命令导包,放大linux执行。

PS : Master

import akka.actor.{Actor, ActorSystem, Props}
import com.typesafe.config.ConfigFactory import scala.collection.mutable
import scala.concurrent.duration._ class Master extends Actor{ println("constructor invoked") override def preStart(): Unit = {
println("prStart invoked")
} //用于接收消息
override def receive: Receive = {
case "connect" =>{
println("a client invoked")
sender ! "reply"
}
case "hello" =>{
println("hello")
}
}
} object Master{
def main(args: Array[String]){
val host = "192.168.93.217"
val port = 8888
// 准备配置
val configStr =
s"""
|akka.actor.provider = "akka.remote.RemoteActorRefProvider"
|akka.remote.netty.tcp.hostname = "$host"
|akka.remote.netty.tcp.port = "$port"
""".stripMargin
val config = ConfigFactory.parseString(configStr)
//ActorSystem老大,辅助创建和监控下面的Actor,他是单例的
val actorSystem = ActorSystem("MasterSystem", config)
//创建Actor
val master = actorSystem.actorOf(Props(new Master), "Master")
master !"hello"
actorSystem.awaitTermination()
}
}

PS:Worker

import akka.actor.Actor
import java.util.UUID import akka.actor.{Actor, ActorSelection, ActorSystem, Props}
import com.typesafe.config.ConfigFactory
import scala.concurrent.duration._
class Worker extends Actor{
var master : ActorSelection = _
//建立连接
override def preStart(): Unit = {
//println("prStart invoked")
//跟Master建立连接
master = context.actorSelection(s"akka.tcp://MasterSystem@192.168.93.217:8888/user/Master")
//向Master发送注册消息
master ! "connect"
} //用于接收消息
override def receive: Receive = {
case "reply" =>{
println("a reply from master")
}
/*case "hello" =>{
println("hello")
}*/
}
} object Worker{
def main(args: Array[String]){
val host = "192.168.93.217"
val port = 9999 //端口要修改
// 准备配置
val configStr =
s"""
|akka.actor.provider = "akka.remote.RemoteActorRefProvider"
|akka.remote.netty.tcp.hostname = "$host"
|akka.remote.netty.tcp.port = "$port"
""".stripMargin
val config = ConfigFactory.parseString(configStr)
//ActorSystem老大,辅助创建和监控下面的Actor,他是单例的
val actorSystem = ActorSystem("WorkerSystem", config)
//创建Actor
actorSystem.actorOf(Props[Worker], "Worker")
actorSystem.awaitTermination()
}
}

------------------------------------------------------------------------下午没学

day29akka的更多相关文章

随机推荐

  1. oracle查看编码以及修改编码

    oracle的编码一直是个很重要的问题,以前也总结的写过,但都忘了,今天再在这写一下. 首先查看oracle数据库的编码 SQL>select * from nls_database_param ...

  2. angular4-注入服务

    //配置已创建的服务:import { MemberService } from "./member.service";@NgModule({ // ... providers: ...

  3. windows文件映射

    0x01 使用文件映射实现共享内存. 用内存映射文件实现进程间的通讯:Windows中的内存映射文件的机制为我们高效地操作文件提供了一种途径,它允许我们在进程中保留一段内存区域,把硬盘或页文件上的目标 ...

  4. 7series 逻辑单元理解(更新中)

    7series 逻辑单元理解 ug768和ug799文档介绍了7系列芯片中包含的基本逻辑单元,对其中常用的单元,进行下分析. 1.IOBUF单元 (1)真值表 (2)用途 the  design  e ...

  5. CentOS7调整home盘空间到根目录

    1:解除挂载 umount /home 如报错: [root@zabbix-hk-01 home]# umount /home umount: /home:目标忙. (有些情况下通过 lsof(8) ...

  6. 【python】pandas display选项

    import pandas as pd 1.pd.set_option('expand_frame_repr', False) True就是可以换行显示.设置成False的时候不允许换行 2.pd.s ...

  7. 使用generator生成dao、mapping和model

    我们在ssm框架开发的时候(不限于此框架),为了开发效率.有时候不得不提高一下代码速度.千篇一律的事情谁都头疼,比如写dao,写model,写mapping等等.不仅慢,而且一不留神,还会出错. 今天 ...

  8. vue中七牛插件使用

    <template> <div id="cxUpload" class="cx-upload"> <button id=" ...

  9. python day10作业

  10. js中call、apply和bind的区别

    在JS中,这三者都是用来改变函数的this对象的指向的,他们有什么样的区别呢.在说区别之前还是先总结一下三者的相似之处:1.都是用来改变函数的this对象的指向的.2.第一个参数都是this要指向的对 ...