我有一个关于如何负载平衡Web套接字的问题.
我有一个支持Web套接字的服务器.浏览器连接到我的站点,每个浏览器打开一个Web套接字www.mydomain.com.这样,我的社交网络应用程序可以将消息推送到客户端.
传统上,只使用HTTP请求,我会通过在两个Web服务器前添加第二个服务器和负载均衡器来扩展.
使用Web套接字,连接必须直接与Web服务器,而不是负载平衡器,因为如果一台机器的物理限制为64k开放端口,并且客户端连接到负载均衡器,那么我无法支持超过64k并发用户.
那我该怎么办 -
让页面加载时客户端直接连接到Web服务器(而不是负载均衡器)?我是否只是从节点加载JavaScript,并且每次最初请求页面时,负载均衡器(或其他)会随机修改脚本的URL?
处理涟漪开始?当Web服务器关闭时,浏览器会注意到连接已关闭.我可以编写JavaScript代码来尝试重新打开连接,但该节点将会消失一段时间.所以我想我必须回到负载均衡器来查询下一个要使用的节点的地址?
我确实想知道负载均衡器在初始请求上发送重定向,以便浏览器最初请求www.mydomain.com并重定向到www34.mydomain.com.这很有效,直到节点出现故障 - 像Facebook这样的网站不这样做.他们是如何做到的呢?
我有这样的方法:
def aMethod(param: String = "asdf") = {
...
}
Run Code Online (Sandbox Code Playgroud)
如果调用该方法如下,那么param将被赋予默认值"asdf":
aMethod() ...
Run Code Online (Sandbox Code Playgroud)
但我想要的是,如果调用该方法null,那么也将应用默认值:
aMethod(null) //inside the method, I can use `param` and it has the value "asdf".
Run Code Online (Sandbox Code Playgroud)
什么是Scala最好的方法?我可以想到模式匹配或简单的if陈述.
我发现两种模式似乎有相同的目标 - 有什么区别?
我想使用抽象类型而不是类型参数.
在我的泛型类构造函数中,我想要一个泛型类型的参数,但代码不能编译:
class SomeOtherClass(val s: S){
type S
}
Run Code Online (Sandbox Code Playgroud)
scala编译器错误"找不到:类型S"
如果我使用类型参数而不是抽象类型,那么它的工作原理如下:
class SomeClass[T](val t: T){
//...
}
Run Code Online (Sandbox Code Playgroud)
如果我想在构造函数中使用泛型参数,scala是否强制我使用类型参数而不是抽象类型?
还有另一种方法吗?
我似乎错过了JPA的标准API及其类型安全性.请考虑以下代码:
@Entity
@Access(FIELD)
class User(
@Id
Long id;
@Column(unique=true)
String email;
String password;
}
Run Code Online (Sandbox Code Playgroud)
元模型在这里:
@StaticMetamodel(User.class)
public static class User_ {
public static volatile SingularAttribute<User, Long> id;
public static volatile SingularAttribute<User, String> email;
public static volatile SingularAttribute<User, String> password;
}
Run Code Online (Sandbox Code Playgroud)
然后使用Java EE教程中的页面构建一些代码来运用该类:
CriteriaBuilder cb = em.getCriteriaBuilder();
CriteriaQuery<User> cq = cb.createQuery(User.class);
Root<User> user = cq.from(User.class);
cq.select(user);
cq.where(cb.equal(user.get(User_.email), "john@google.com")); //this line is my problem
TypedQuery<User> q = em.createQuery(cq);
List<User> allUsers = q.getResultList();
assertEquals(1, allUsers.size());
Run Code Online (Sandbox Code Playgroud)
它工作正常.但是,如果我更改"where"子句以使用Integer而不是String("john@google.com"),我希望代码不能编译.然而它汇编得很好.
我认为标准API应该是类型安全的吗?使用标准JPQL,这几乎不比以下更安全.我的意思是,上面代码中元模型的目的是什么?我从中获得了一切.
User u = em.createQuery("select …Run Code Online (Sandbox Code Playgroud) 看着代码JavaConversions和JavaConverters,我不确定这是"正确"的方式(与2.10)到Java和Scala集合之间的转换(任一方向).
似乎有很多@deprecated注释.
是否已发布Scala团队(Typesafe?)的明确答案?
谢谢,约翰
我想创建一个可变的协变类,所以我需要在setter方法中添加一个较低的类型绑定.但是我也想让setter方法设置一个字段,所以我猜这个字段需要绑定相同的类型?
class Thing[+F](initialValue: F) {
private[this] var secondValue: Option[G >: F] = None
def setSecondValue[G >: F](v: G) = {
this.secondValue = Some(v)
}
}
Run Code Online (Sandbox Code Playgroud)
该方法编译得很好.但是名为secondValue的字段根本不编译,错误消息如下:
Multiple markers at this line
- ']' expected but '>:' found.
- not found: type G
Run Code Online (Sandbox Code Playgroud)
我需要做什么?
我有一个这个代码的类:
package shop.orders.services.email
private[services] class EmailService {...}
Run Code Online (Sandbox Code Playgroud)
然后在另一个包中,我使用该类:
package shop.ui
import shop.orders.services.email.EmailService
class PaymentConfirmation extends WithFacesContext {
var emailService: EmailService = null
Run Code Online (Sandbox Code Playgroud)
查看生成的字节码,没有任何访问修饰符的迹象,这是有道理的,因为Java不支持此类访问限制.那么如果我创建一个包含块1之类的代码的库,并尝试针对库编译块2会发生什么 - 编译器不会失败,因为信息丢失了.或者它是否包含在清单中?
我正在使用Scala 2.9.2.
我有一个a的实例,scala.collection.immutable.List我想调用map它上面的方法,但是来自Java.
我需要提供一个CanBuildFrom.
我注意到很多scala集合伴随对象都包含隐式CanBuildFrom实例,但我无法确定我需要使用哪一个.
这是我的Java代码:
Function1<WeatherData, BigDecimal> mapper = new AbstractFunction1<WeatherData, BigDecimal>(){
@Override
public BigDecimal apply(WeatherData data) {
return data.getTemps().reduce(adder).divide(new BigDecimal(data.getTemps().size()));
}
};
scala.collection.immutable.List<WeatherData> data = ...
data.map(mapper, ???);
Run Code Online (Sandbox Code Playgroud)
我应该作为CanBuildFrom传递什么(第二个参数?)
PS使用Scala 2.10-M5
我想调用一个包含大量数据的数据库,可能需要一段时间才能返回.
我打算在调用Akka.future(f)的过程中完成这项工作,并在完成工作时使用Async {}来呈现响应.
这样做是否有意义,或者我应该只在控制器中进行长数据库调用,而不将工作发送到Akka?
或者有没有办法进行非阻塞数据库访问?
scala ×7
akka ×1
constructor ×1
covariance ×1
criteria-api ×1
datamapper ×1
generics ×1
java ×1
jpa ×1
nonblocking ×1
server-push ×1
type-safety ×1
websocket ×1