小编Wil*_*oom的帖子

我必须使用HTTP/2.0发送Apple推送通知吗?我可以使用libcurl吗?

正如您从标题中推断的那样,这个问题实际上是两个问题.

第一个问题:我必须使用HTTP/2.0发送Apple推送通知吗?

在Apple提供的APNs Provider API文档中,开头的段落指定:

提供程序API基于HTTP/2网络协议.

在整个文档中还有其他几个对HTTP/2.0的引用.但是我没有看到(这并不是说它不存在)任何指定必须使用HTTP/2.0的东西.这是否意味着我被允许使用任何HTTP版本?或者我实际上是否受限于HTTP/2.0?

我对HTTP/1.1非常熟悉,但我对HTTP/2.0几乎一无所知,因此如果我能够使用我熟悉的旧协议,我宁愿这样做.

第二个问题(基于第一个问题):我可以将libcurl与APN一起使用吗?

只有对第一个问题给出肯定答案,这个问题才有意义.如果我不能将HTTP/2.0与APN一起使用,那么我已经知道我可以使用libcurl了.

我将从已经很繁忙的服务器发送许多APN,我宁愿本地也这样做 - 因此我计划尽可能使用libcurl.但是我知道libcurl在HTTP/2.0方面有些限制.

主要问题是,当libcurl建立HTTP/2.0连接时,它实际上以包含upgrade标头的HTTP/1.1请求开始,然后等待101 Switching Protocols状态行.APN是否支持此行为?或者我必须尝试使用​​像nghttp2这样的东西吗?

我发现nghttp2有点复杂,目前记录得非常糟糕.我担心如果我不能使用libcurl,我可能最终必须自己使用套接字来实现HTTP/2.0(这将是最糟糕的).

任何问题的任何帮助都表示赞赏!谢谢大家!

backwards-compatibility libcurl apple-push-notifications http2

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

有没有办法禁用GitHub页面的SSL/TLS?

我一直在寻找一个公开存储我的一些XML模式的地方,而不必实际托管它们.我决定GitHub Pages是理想的平台.我是正确的,除了我无法弄清楚如何关闭SSL/TLS.当我尝试使用普通的旧HTTP获取我的页面时,我得到了301 Moved Permanently响应.

显然这不是什么大问题.在最糟糕的情况下,下载我的模式需要更长的时间,人们通常只使用他们已经缓存的模式.但是真的没有办法解决这个问题吗?

hosting https http github-pages

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

php:// input和php:// stdin之间有什么区别?

同样php://output和之间有什么区别php://stdout

我试图弄清楚服务器如何提供php://inputphp://output.我能想到的唯一的办法(假设两者php://inputphp://output是根据独立神秘的php.ini文件中的这个页面在手册中)将改变stdin,并stdout以两指连接插座的文件描述符.但令我懊恼的是,我发现了这一点php://stdin并且php://stdout也被定义了 - 大概是以不同的方式.

这只是冗余还是这些文件名实际上是指做不同的事情?谁能告诉我这里发生了什么?

php sockets io stdin stdout

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

Posix 中的守卫大小是多少?

这个问题的灵感来自pthread API 中的pthread_attr_setguardsize和方法。该方法的文档可以在此处pthread_attr_getguardsize找到。

在这些方法的文档中,我最接近地找到的有关防护大小实际大小的解释是:

Guardsize 属性控制所创建线程堆栈的保护区大小。Guardsize 属性提供防止堆栈指针溢出的保护。如果线程的堆栈是使用保护保护创建的,则实现会在堆栈的溢出端分配额外的内存,作为防止堆栈指针堆栈溢出的缓冲区。如果应用程序溢出到该缓冲区,则会导致错误(可能会向线程传递 SIGSEGV 信号)。

我确信这对某些人来说是完全有道理的,但我仍然有点迷失。

据我所知,守卫是位于堆栈末尾的溢出缓冲区,旨在防止堆栈溢出。不过我还有两个问题:

  1. 为什么使用特殊的溢出缓冲区比简单地使用更大的堆栈更好?
  2. 如果溢出防护仍然向线程发送错误,那么拥有溢出缓冲区还有什么意义呢?

我确信有一些简短的、概念性的东西可以回答这两个问题,我希望这里有人能够提供它。谢谢大家!

PS 这也非常有趣,我终于可以用“堆栈溢出”来标记问题了。

memory stack-overflow stack posix

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

是否可以制作Java可执行文件?

为了清楚起见,通过可执行文件我并不意味着为处理器准备好字面字节.例如,当一个shebang被添加到顶部时,一个被解释且不可执行的bash脚本变得可执行,该脚本指定应该由/bin/bash/bin/sh将要解释它的任何程序运行脚本.

我想知道是否可以使用Java,这在技术上不是脚本语言,但绝对不可执行.看起来Java很难,因为用户实际上没有机会在编译文件中添加shebang,而编译的java也不能来自stdin.

java executable interpreted-language shebang bin

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

交错立体声PCM线性Int16大端音频是什么样的?

我知道在线有很多资源可以解释如何对PCM数据进行解交织.在我的当前项目的过程中,我已经看过他们大多......但我在音频处理没有背景,我有一个很很难找到如何详细的解释正是音频的这种常见的形式被存储.

我明白我的音频将有两个通道,因此样本将以[左] [右] [左] [右]的格式存储...我不明白的是这究竟是什么意思.我还读过每个样本以[左MSB] [左LSB] [右MSB] [右LSB]的格式存储.这是否意味着每个16位整数实际上编码两个8位帧,或者每个16位整数它自己的帧是指向左还是右通道?

谢谢大家.任何帮助表示赞赏.

编辑:如果您选择举例,请参阅以下内容.

方法上下文

具体来说,我要做的是将交错的short []转换为两个float [],每个float []代表左或右通道.我将用Java实现它.

public static float[][] deinterleaveAudioData(short[] interleavedData) {
    //initialize the channel arrays
    float[] left = new float[interleavedData.length / 2];
    float[] right = new float[interleavedData.length / 2];
    //iterate through the buffer
    for (int i = 0; i < interleavedData.length; i++) {
        //THIS IS WHERE I DON'T KNOW WHAT TO DO
    }
    //return the separated left and right channels
    return new float[][]{left, right};
}
Run Code Online (Sandbox Code Playgroud)

我目前的实施

我试过播放由此产生的音频.它非常接近,足够接近,你可以理解一首歌的词,但显然仍然不是正确的方法.

public …
Run Code Online (Sandbox Code Playgroud)

java audio pcm audioformat interleave

4
推荐指数
3
解决办法
3474
查看次数

如何在 macos 上实现虚拟文件系统?

我已经看到一些应用程序能够在 MacOS 上的 Finder 中将自己表示为外部磁盘。通常,这些是云存储应用程序,例如PCloud DriveWD Discovery。我想知道他们是如何做到这一点的。

我意识到云存储可能只是实现了一些远程文件系统协议,例如 Samba 或 AFP。但是我仍然不太明白应用程序如何将文件系统直接挂载到 Finder 中。另外,如果不依赖网络存储,是否有更有效的方法来挂载虚拟文件系统?

macos finder virtualfilesystem kernel-extension

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

命令行选项的“意义”是什么?

我正在阅读glib 的 CLI 选项解析器的文档,我对它们的选项标志之一感到非常困惑。

G_OPTION_FLAG_REVERSE
对于此类选项G_OPTION_ARG_NONE,此标志指示选项的含义相反。

这是什么意思?期权的“意义”是什么?

c glib command-line-interface command-line-arguments

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

Kotlin 作用域函数块是否有效内联?

我正在编写一个 Kotlin内联类,以使Decimal4J更方便,而无需实例化任何对象。我担心作用域函数可能会创建 lambda 对象,从而使整个事情变得毫无意义。

compareTo考虑以下示例中的函数。

/* imports and whatnot */

@JvmInline
value class Quantity(val basis: Long) {

    companion object {
        val scale: Int = 12
        val metrics: ScaleMetrics = Scales.getScaleMetrics(scale)
        val arithmetic: DecimalArithmetic = metrics.defaultArithmetic
    }

    operator fun compareTo(alt: Number): Int {
        with(arithmetic) {
            val normal = when (alt) {
                is Double     -> fromDouble(alt)
                is Float      -> fromFloat(alt)
                is Long       -> fromLong(alt)
                is BigDecimal -> fromBigDecimal(alt)
                is BigInteger -> fromBigInteger(alt)
                else          -> fromLong(alt.toLong())
            }
            return …
Run Code Online (Sandbox Code Playgroud)

primitive lambda inline kotlin

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