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. new_images

    /home/westward/Pictures/Screenshot from 2017-03-19 20:23:55.png

  2. 关于js的对象原型继承(一)

    javascript中,对象的继承是通过原型去继承. 可以这样理解:js中的对象,包含的除了属性和方法,还有一个最基本的原型__proto__对象.这个原型__proto__指向谁,这个对象就继承谁. ...

  3. 升级pip10.0.0后出现ModuleNotFoundError: No module named 'pip'的问题

    pip10升级后各种pip install出错----- Traceback (most recent call last): File "/usr/local/bin/pip", ...

  4. 2.6 C++通过引用来传递和返回类对象

    参考:http://www.weixueyuan.net/view/6338.html 总结: C++语言中,由类声明的对象,和其它类型声明的变量一样,同样可以通过传值.引用和指针的方式作为函数的参数 ...

  5. 【Linux优化】Linux安装之后的优化

    yum source configmv /etc/yum.repos.d/CentOS-Base.repo{,.bkp} wget -O /etc/yum.repos.d/CentOS-Base.re ...

  6. capjoint中的tel3核心代码teleseis3.f90

    为了加入更多层的模型 将 teleseis3.f90 /home/capjoint-master/src/tel3/teleseis3.90的地层模型读取部分改为: program test PARA ...

  7. powerdesigner 实体关系模型CDM与物理数据模型PDM互转

    1.创建CDM 2.CDM转换PDM 3.PDM转CDM 环境 powerdesigner15.1 1.创建CDM File --> new Model-->Conceptual data ...

  8. normalization 阅读笔记

    https://zhuanlan.zhihu.com/p/33173246 阅读笔记 1. normalization whiting - PCA 2. Internal Covariate Shif ...

  9. 前端关于列表的基础 day47

    <!DOCTYPE html><html lang="zh-CN"><head> <meta charset="utf-8&qu ...

  10. Python 基础学习day1

    1.计算机的组成 CPU:相当于人的大脑,预算中心. 内存:临时加载数据或者程序. 缺点:断电即消失. 硬盘:存放所有的数据,输入输出设备. 2.什么是操作系统. 调控所有硬件与软件的中间介质. 3. ...