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. 四:FAQ附录(容器交互,镜像交互,镜像导出)

    1.交互式运行容器的方法: 1>-it进入到操作系统中: 2>另开一个cmd验证: 3>这是在image之上多了一个可写的从:可以运行centos的命令做一些事(touch .yum ...

  2. [Leetcode 44]通配符匹配Wildcard Matching

    [题目] 匹配通配符*,?,DP动态规划,重点是*的两种情况 想象成两个S.P长度的字符串,P匹配S. S中不会出现通配符. [条件] (1)P=null,S=null,TRUE (2)P=null, ...

  3. yaw roll pitch matrix

    http://planning.cs.uiuc.edu/node102.html http://planning.cs.uiuc.edu/node103.html

  4. Android : 获取声卡信息的测试代码

    完整的编译包(android平台): 链接:http://pan.baidu.com/s/1qXMTT7I 密码:2bow /* * ALSA parameter test program * * C ...

  5. C++基础知识:构造与析构

    1.构造函数的定义: C++中的类可以定义与类名相同的特殊成员函数这种与类名相同的成员函数叫做构造函数构造函数在定义时可以有参数,但是没有任何返回类型的声明 2.构造函数的调用: 一般情况下C++编译 ...

  6. transclude

    http://jsfiddle.net/ospatil/A969Z/157/ transclude :true  允许指令内部的dom元素, 保留到 自定义指令的template属性里的含有 ng-t ...

  7. shell怎么判断两个文件内容是否相同

    #cat diff_two_file#/bin/sbinfile1=/mnt/mmc/test/aafile2=/mnt/mmc/test/bbdiff $file1 $file2 > /dev ...

  8. 2017年3月1日09:45:39 css选择器,session数据取不到

    昨天碰到了一个问题,通过输入指定的url进行登录在服务端将url存在session中但是登陆之后因为页面提交的登录请求是ajax请求,在后端提取session时获取不当之前存的url,老司机说不是同一 ...

  9. YUM仓库配置

    YUM的前身是YUP(Yellow dog Updater,Yellow dog Linux的软件更新器),最初由TSS公司(Terra Soft Solutions,INC.)使用Python语言开 ...

  10. winform 点击控件拖动窗体

    private Point mPoint = new Point(); private void 选择控件_MouseDown(object sender, MouseEventArgs e) { m ...