小编sea*_*and的帖子

创建TCP连接的一般开销

与UDP相比,我想知道创建新连接的一般成本.我知道TCP需要初始交换数据包(3次握手).什么是其他费用?例如,在设置缓冲区等内核中是否存在某种神奇的东西?

我问的原因是我可以保持现有连接打开并根据需要重用它.但是,如果重新连接的开销很小,则会降低复杂性.

sockets networking tcp

13
推荐指数
3
解决办法
9563
查看次数

Redis,SCAN游标"状态管理"如何工作?

Redis有一个SCAN命令,可用于迭代匹配模式等的键.

Redis SCAN doc

首先给出游标值为0; 每次调用都会返回一个新的游标值,您将其传递给下一个SCAN调用.值为0表示迭代结束.据说不需要服务器或客户端状态(游标值除外)

我想知道Redis如何实现扫描算法?

redis

9
推荐指数
1
解决办法
3858
查看次数

Scala和Play框架2.2.0,Action.async和isAuthenticated

我有一个使用zentasks示例中描述的isAuthenticated模式的应用程序.它还使用Future/Async来最小化阻塞...

  def index = isAuthenticated { username => implicit request =>        
    val promise = 
      Future {
        Foo.all()    
      }
    Async {
      promise.map(f => Ok(views.html.foo.index(username, f)))
    }        
  }
Run Code Online (Sandbox Code Playgroud)

这在Play 2.2.0中继续有效,但不推荐使用Future/Async模式.我们应该使用Action.async; 就像是:

  def asyncTest = Action.async {
    val fut = Future {
      // Artificial delay to test.
      Thread.sleep(5000)
      "McFly"
    }
    fut.map (f => Ok(f))      
  }
Run Code Online (Sandbox Code Playgroud)

我的问题是; 我如何使用Action.async与上面的身份验证方法,或类似的东西?

asynchronous scala playframework-2.0

8
推荐指数
1
解决办法
3424
查看次数

播放框架2,postgres"此连接已关闭"

我正在使用Postgres 9.2-1002-jdbc4和Anorm 2.2.0 API运行Play 2.2.0应用程序.我经常遇到连接问题,如下所示:

2013-11-19 19:45:36,544 [ERROR][a.d.Dispatcher][play-akka.actor.default-dispatcher-17] This connection has been closed.org.postgresql.util.PSQLException: This connection has been closed.
    at org.postgresql.jdbc2.AbstractJdbc2Connection.checkClosed(AbstractJdbc2Connection.java:822) ~[org.postgresql.postgresql-9.2-1002-jdbc4.jar:na]
    at org.postgresql.jdbc2.AbstractJdbc2Connection.setAutoCommit(AbstractJdbc2Connection.java:769) ~[org.postgresql.postgresql-9.2-1002-jdbc4.jar:na]
    at com.jolbox.bonecp.ConnectionHandle.setAutoCommit(ConnectionHandle.java:1247) ~[com.jolbox.bonecp-0.8.0-rc1.jar:na]
    at com.jolbox.bonecp.ConnectionHandle.<init>(ConnectionHandle.java:251) ~[com.jolbox.bonecp-0.8.0-rc1.jar:na]
    at com.jolbox.bonecp.ConnectionHandle.recreateConnectionHandle(ConnectionHandle.java:273) ~[com.jolbox.bonecp-0.8.0-rc1.jar:na]
    at com.jolbox.bonecp.ConnectionHandle.close(ConnectionHandle.java:476) ~[com.jolbox.bonecp-0.8.0-rc1.jar:na]
    at play.api.db.AutoCleanConnection.close(DB.scala:485) ~[com.typesafe.play.play-jdbc_2.10-2.2.0.jar:2.2.0]
    at play.api.db.DBApi$class.withConnection(DB.scala:84) ~[com.typesafe.play.play-jdbc_2.10-2.2.0.jar:2.2.0]
    at play.api.db.BoneCPApi.withConnection(DB.scala:276) ~[com.typesafe.play.play-jdbc_2.10-2.2.0.jar:2.2.0]
    at play.api.db.DBApi$class.withTransaction(DB.scala:97) ~[com.typesafe.play.play-jdbc_2.10-2.2.0.jar:2.2.0]
    at play.api.db.BoneCPApi.withTransaction(DB.scala:276) ~[com.typesafe.play.play-jdbc_2.10-2.2.0.jar:2.2.0]
    at play.api.db.DB$$anonfun$withTransaction$4.apply(DB.scala:185) ~[com.typesafe.play.play-jdbc_2.10-2.2.0.jar:2.2.0]
    at play.api.db.DB$$anonfun$withTransaction$4.apply(DB.scala:185) ~[com.typesafe.play.play-jdbc_2.10-2.2.0.jar:2.2.0]
    at scala.Option.map(Option.scala:145) ~[org.scala-lang.scala-library-2.10.2.jar:na]
    at play.api.db.DB$.withTransaction(DB.scala:185) ~[com.typesafe.play.play-jdbc_2.10-2.2.0.jar:2.2.0]
Run Code Online (Sandbox Code Playgroud)

我知道没有数据库连接问题; 数据库运行在同一个盒子上.这些连接问题每天间歇性地发生2-3次,并且可以自行恢复.

我尝试了这些荒谬的低连接测试设置:

db.default.idleConnectionTestPeriod=10 seconds
db.default.idleMaxAge=30 seconds
db.default.maxConnectionAge=60 seconds
Run Code Online (Sandbox Code Playgroud)

这些连接设置似乎可以减少它,虽然我想知道是否有更基本的事情发生.postgres日志中没有任何内容.

bonecp playframework-2.0 jdbc-postgres

8
推荐指数
1
解决办法
717
查看次数

数据库如何实现SQL'ORDER BY x'?

我想知道这些是如何工作的,特别是对于大型结果集.例如,DB是否可能将原始结果写入磁盘然后进行外部排序?

我也想知道如何使用LIMIT ... OFFSET.如果数据库无法利用现有索引,则DB似乎必须对整个事物进行排序并采集原始结果集的子集.

sql relational-database

7
推荐指数
1
解决办法
732
查看次数

Rails 3 ActiveRecord方法链接,引擎盖下

假设您构建了一个涉及多个方法链接的查询,例如

Post.where('id > 10').limit(20).order('id asc').except(:order)
Run Code Online (Sandbox Code Playgroud)

我想知道幕后发生了什么?据推测,链的每个部分都有助于构建一个SQL SELECT,一旦链完成,就会执行语句,创建模型等.它如何"知道"链的末端在哪里?每个方法都返回一个创建SQL片段的ActiveRecord :: Relation吗?

activerecord ruby-on-rails

7
推荐指数
1
解决办法
1728
查看次数

logback:控制异常堆栈跟踪的格式

我在Scala/Play 2.2.0应用程序上使用Logback 1.0.13.现有配置如下:

  <appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>${application.home}/logs/application.log</file>
    <encoder>
     <pattern>%date [%level][%logger{1}][%thread{1}] %message%xException%n</pattern>
    </encoder>
  </appender>
Run Code Online (Sandbox Code Playgroud)

我正在寻找是否有办法配置它,以便异常追溯线有一个自定义的分隔符.代替

play.api.Configuration$$anon$1: Configuration error[Cannot connect to database [default]]
at play.api.Configuration$.play$api$Configuration$$configError(Configuration.scala:92) ~[play_2.10-2.2.0.jar:2.2.0]
at play.api.Configuration.reportError(Configuration.scala:570) ~[play_2.10-2.2.0.jar:2.2.0]
at play.api.db.BoneCPPlugin$$anonfun$onStart$1.apply(DB.scala:252) ~[play-jdbc_2.10-2.2.0.jar:2.2.0]
Run Code Online (Sandbox Code Playgroud)

我想在每行前面放一些字符,如下所示:

play.api.Configuration$$anon$1: Configuration error[Cannot connect to database [default]]
>>> at play.api.Configuration$.play$api$Configuration$$configError(Configuration.scala:92) ~[play_2.10-2.2.0.jar:2.2.0]
>>> at play.api.Configuration.reportError(Configuration.scala:570) ~[play_2.10-2.2.0.jar:2.2.0]
>>> at play.api.db.BoneCPPlugin$$anonfun$onStart$1.apply(DB.scala:252) ~[play-jdbc_2.10-2.2.0.jar:2.2.0]
Run Code Online (Sandbox Code Playgroud)

log4j logback playframework-2.0

6
推荐指数
1
解决办法
2621
查看次数

VPN客户端如何工作?

我想知道L2TP如何在内部工作以提供透明的IP连接.我知道L2TP通过UDP端口1721隧道传输IP数据包.但是我没有看到它如何提供透明访问.例如,假设我有一个VPN连接,我的浏览器连接到google.com.它通常会通过端口80与谷歌的IP地址建立TCP连接.但是有些东西必须拦截这个请求并通过L2TP的机制进行路由.

vpn networking tcp

5
推荐指数
1
解决办法
2032
查看次数

Postgres,更新和锁定订单

我正在研究Postgres 9.2.

有2个UPDATE,每个都在自己的交易中.一个看起来像:

UPDATE foo SET a=1 WHERE b IN (1,2,3,4);
Run Code Online (Sandbox Code Playgroud)

另一个是类似的:

UPDATE foo SET a=2 WHERE b IN (1,2,3,4);
Run Code Online (Sandbox Code Playgroud)

这些可能同时运行,实际上在'IN'表达式中有500+.我有时会看到死锁.确实,"IN"表达式中的项目顺序实际上可能不会影响真正的锁定顺序吗?

sql postgresql deadlock locking transactions

4
推荐指数
2
解决办法
1888
查看次数

在Linux中,我正在寻找一种方法,让一个进程通过阻塞来发出信号

我正在寻找一个简单的事件通知系统:

  1. 进程A阻塞直到它被...通知

  2. 进程B,触发进程A.

如果我在Win32中这样做,我可能会使用事件对象('A'块,当'B'执行SetEvent时).我需要一些非常快速和脏的东西(更喜欢脚本而不是C代码).你会建议什么样的东西?我想知道文件咨询锁,但它似乎很乱.其中一个进程必须主动打开文件才能保持锁定.

linux events ipc blocking

1
推荐指数
1
解决办法
114
查看次数