在页面上拥有多个彗星演员是个好主意吗?
我目前有一个简单的聊天框,就像Lift文档和简单的网络摄像头流处理程序一样。
当两个人都被激活时我遇到了锁定,例如我在聊天中输入了一条消息,一切都很好,但是当我启动相机时,聊天框不再有效。
这种设置的最佳做法是什么?我的目标是在页面上有两个以上,但是想知道是否有一个演员将结果发送到页面以进行聊天和流等会更好。
代码发布如下:
CHAT
case class ChatMessage(name: String, text: String)
class ChatComet extends CometActor with CometListener {
private var messages: List[ChatMessage] = Nil
def registerWith = ChatServer
override def lowPriority = {
case v: List[ChatMessage] => messages = v; reRender()
}
def render = {
"li *" #> messages.map(message =>
".name *" #> message.name &
".text *" #> message.text
)
}
}
object ChatServer extends LiftActor with ListenerManager {
private var messages: List[ChatMessage] = Nil
def createUpdate = messages
override def lowPriority = {
case message: String if message.length > 0 =>
messages :+= ChatMessage("Anon", message);
updateListeners()
}
}
STREAM(网络摄像头)
case class StreamItem(name: String, path: String, level: String)
class StreamComet extends CometActor with CometListener {
private var streams: List[StreamItem] = Nil
def registerWith = StreamServer
override def lowPriority = {
case v: List[StreamItem] =>
streams = v;
reRender();
partialUpdate(Call("STREAMMOD.stream_view.add_stream({ path : '" + streams.reverse(0).path + "', level : '_1'})"));
}
def render = {
"li *" #> streams.map(stream =>
".name *" #> stream.name.toString &
".stream [id]" #> stream.path.toString
)
}
}
object StreamServer extends LiftActor with ListenerManager {
private var streams: List[StreamItem] = Nil
def createUpdate = streams
override def lowPriority = {
case stream: String if stream.length > 0 =>
streams :+= StreamItem("James", stream, "_1");
updateListeners()
}
}
答案 0 :(得分:2)
每页有几个彗星演员应该可以正常工作。我在一个页面上拥有的最多的是11.在其他项目中我有过4.有些人可能认为它有点矫枉过正,但它让我有较小的演员,责任有限。 Lift处理使演员通过一个连接到服务器的所有管道,这意味着它将不会使用比所需更多的资源。
代码看起来正确,但我会调查STREAMMOD.stream_view.add_stream
。
我知道这个答案来得很晚,但它可能对其他人有所帮助。